mirror of
https://github.com/Impostor/Impostor.git
synced 2026-10-20 01:46:11 +00:00
Fix bug where other players weren't visible
This commit is contained in:
1 parent
bc028b421c
commit
5db481e039
6 files changed
+284
-2
No files matched your search
@@ -108,7 +108,7 @@ namespace AmongUs.Server.Net
|
||||
message.Write(_hostId);
|
||||
message.WritePacked(_players.Count - 1);
|
||||
|
||||
foreach (var (_, p) in _players.Where(x => x.Value == player))
|
||||
foreach (var (_, p) in _players.Where(x => x.Value != player))
|
||||
{
|
||||
message.WritePacked(p.Client.Id);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net452</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Pcap.Net.x64" Version="1.0.4.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\submodules\Hazel-Networking\Hazel\Hazel.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,70 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace AmongUs.Tools.Proxy
|
||||
{
|
||||
public static class HexUtils
|
||||
{
|
||||
public static string HexDump(byte[] bytes, int bytesPerLine = 16)
|
||||
{
|
||||
if (bytes == null) return "<null>";
|
||||
int bytesLength = bytes.Length;
|
||||
|
||||
char[] HexChars = "0123456789ABCDEF".ToCharArray();
|
||||
|
||||
int firstHexColumn =
|
||||
8 // 8 characters for the address
|
||||
+ 3; // 3 spaces
|
||||
|
||||
int firstCharColumn = firstHexColumn
|
||||
+ bytesPerLine * 3 // - 2 digit for the hexadecimal value and 1 space
|
||||
+ (bytesPerLine - 1) / 8 // - 1 extra space every 8 characters from the 9th
|
||||
+ 2; // 2 spaces
|
||||
|
||||
int lineLength = firstCharColumn
|
||||
+ bytesPerLine // - characters to show the ascii value
|
||||
+ Environment.NewLine.Length; // Carriage return and line feed (should normally be 2)
|
||||
|
||||
char[] line = (new String(' ', lineLength - Environment.NewLine.Length) + Environment.NewLine).ToCharArray();
|
||||
int expectedLines = (bytesLength + bytesPerLine - 1) / bytesPerLine;
|
||||
StringBuilder result = new StringBuilder(expectedLines * lineLength);
|
||||
|
||||
for (int i = 0; i < bytesLength; i += bytesPerLine)
|
||||
{
|
||||
line[0] = HexChars[(i >> 28) & 0xF];
|
||||
line[1] = HexChars[(i >> 24) & 0xF];
|
||||
line[2] = HexChars[(i >> 20) & 0xF];
|
||||
line[3] = HexChars[(i >> 16) & 0xF];
|
||||
line[4] = HexChars[(i >> 12) & 0xF];
|
||||
line[5] = HexChars[(i >> 8) & 0xF];
|
||||
line[6] = HexChars[(i >> 4) & 0xF];
|
||||
line[7] = HexChars[(i >> 0) & 0xF];
|
||||
|
||||
int hexColumn = firstHexColumn;
|
||||
int charColumn = firstCharColumn;
|
||||
|
||||
for (int j = 0; j < bytesPerLine; j++)
|
||||
{
|
||||
if (j > 0 && (j & 7) == 0) hexColumn++;
|
||||
if (i + j >= bytesLength)
|
||||
{
|
||||
line[hexColumn] = ' ';
|
||||
line[hexColumn + 1] = ' ';
|
||||
line[charColumn] = ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b = bytes[i + j];
|
||||
line[hexColumn] = HexChars[(b >> 4) & 0xF];
|
||||
line[hexColumn + 1] = HexChars[b & 0xF];
|
||||
line[charColumn] = (b < 32 ? '·' : (char)b);
|
||||
}
|
||||
hexColumn += 3;
|
||||
charColumn++;
|
||||
}
|
||||
result.Append(line);
|
||||
}
|
||||
return result.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Hazel;
|
||||
using Hazel.Udp;
|
||||
using PcapDotNet.Core;
|
||||
using PcapDotNet.Packets;
|
||||
|
||||
namespace AmongUs.Tools.Proxy
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
private const string DeviceName = "Intel(R) I211 Gigabit Network Connection";
|
||||
|
||||
private static readonly Dictionary<byte, string> TagMap = new Dictionary<byte, string>
|
||||
{
|
||||
{0, "HostGame"},
|
||||
{1, "JoinGame"},
|
||||
{2, "StartGame"},
|
||||
{3, "RemoveGame"},
|
||||
{4, "RemovePlayer"},
|
||||
{5, "GameData"},
|
||||
{6, "GameDataTo"},
|
||||
{7, "JoinedGame"},
|
||||
{8, "EndGame"},
|
||||
{9, "GetGameList"},
|
||||
{10, "AlterGame"},
|
||||
{11, "KickPlayer"},
|
||||
{12, "WaitForHost"},
|
||||
{13, "Redirect"},
|
||||
{14, "ReselectServer"},
|
||||
{16, "GetGameListV2"}
|
||||
};
|
||||
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
var devices = LivePacketDevice.AllLocalMachine;
|
||||
if (devices.Count == 0)
|
||||
{
|
||||
Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
|
||||
return;
|
||||
}
|
||||
|
||||
var device = devices.FirstOrDefault(x => x.Description.Contains(DeviceName));
|
||||
if (device == null)
|
||||
{
|
||||
Console.WriteLine("Unable to find configured device.");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var communicator = device.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000))
|
||||
{
|
||||
using (var filter = communicator.CreateFilter("udp and port 22023"))
|
||||
{
|
||||
communicator.SetFilter(filter);
|
||||
}
|
||||
|
||||
communicator.ReceivePackets(0, PacketHandler);
|
||||
}
|
||||
}
|
||||
|
||||
private static void PacketHandler(Packet packet)
|
||||
{
|
||||
var ip = packet.Ethernet.IpV4;
|
||||
var ipSrc = ip.Source.ToString();
|
||||
var udp = ip.Udp;
|
||||
|
||||
// True if this is our own packet.
|
||||
using (var stream = udp.Payload.ToMemoryStream())
|
||||
{
|
||||
var reader = MessageReader.Get(stream.ToArray());
|
||||
if (reader.Buffer[0] == (byte) SendOption.Reliable)
|
||||
{
|
||||
reader.Offset = 3;
|
||||
reader.Length = udp.Payload.Length - 3;
|
||||
reader.Position = 0;
|
||||
}
|
||||
else if (reader.Buffer[0] == (byte) UdpSendOption.Acknowledgement ||
|
||||
reader.Buffer[0] == (byte) UdpSendOption.Ping ||
|
||||
reader.Buffer[0] == (byte) UdpSendOption.Hello ||
|
||||
reader.Buffer[0] == (byte) UdpSendOption.Disconnect)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Offset = 1;
|
||||
reader.Length = udp.Payload.Length - 1;
|
||||
reader.Position = 0;
|
||||
}
|
||||
|
||||
var isSent = ipSrc.StartsWith("192.");
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (reader.Position >= reader.Length)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
var message = reader.ReadMessage();
|
||||
if (isSent)
|
||||
{
|
||||
HandleToServer(ipSrc, message);
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleToClient(ipSrc, message);
|
||||
}
|
||||
|
||||
if (message.Position < message.Length)
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
Console.WriteLine("- Did not consume all bytes.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void HandleToClient(string source, MessageReader packet)
|
||||
{
|
||||
var tagName = TagMap.ContainsKey(packet.Tag) ? TagMap[packet.Tag] : "Unknown";
|
||||
Console.ForegroundColor = ConsoleColor.Cyan;
|
||||
Console.WriteLine($"{source,-15} Client received: {packet.Tag,-2} {tagName}");
|
||||
|
||||
switch (packet.Tag)
|
||||
{
|
||||
case 14:
|
||||
case 13:
|
||||
packet.Position = packet.Length;
|
||||
break;
|
||||
case 0:
|
||||
Console.WriteLine("- GameCode " + packet.ReadInt32());
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
Console.WriteLine(HexUtils.HexDump(packet.Buffer.Take(packet.Length).ToArray()));
|
||||
packet.Position = packet.Length;
|
||||
break;
|
||||
case 7:
|
||||
Console.WriteLine("- GameCode " + packet.ReadInt32());
|
||||
Console.WriteLine("- PlayerId " + packet.ReadInt32());
|
||||
Console.WriteLine("- Host " + packet.ReadInt32());
|
||||
var playerCount = packet.ReadPackedInt32();
|
||||
Console.WriteLine("- PlayerCount " + playerCount);
|
||||
for (var i = 0; i < playerCount; i++)
|
||||
{
|
||||
Console.WriteLine("- PlayerId " + packet.ReadPackedInt32());
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
Console.WriteLine("- GameCode " + packet.ReadInt32());
|
||||
Console.WriteLine("- Flag " + packet.ReadSByte());
|
||||
Console.WriteLine("- Value " + packet.ReadBoolean());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void HandleToServer(string source, MessageReader packet)
|
||||
{
|
||||
var tagName = TagMap.ContainsKey(packet.Tag) ? TagMap[packet.Tag] : "Unknown";
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
Console.WriteLine($"{source,-15} Server received: {packet.Tag,-2} {tagName}");
|
||||
|
||||
switch (packet.Tag)
|
||||
{
|
||||
case 0:
|
||||
Console.WriteLine("- GameInfo length " + packet.ReadBytesAndSize().Length);
|
||||
break;
|
||||
case 1:
|
||||
Console.WriteLine("- GameCode " + packet.ReadInt32());
|
||||
Console.WriteLine("- Unknown " + packet.ReadByte());
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
Console.WriteLine("- GameCode " + packet.ReadInt32());
|
||||
Console.WriteLine(HexUtils.HexDump(packet.Buffer.Take(packet.Length).ToArray()));
|
||||
packet.Position = packet.Length;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hazel", "..\submodules\Haze
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AmongUs.Tests", "AmongUs.Tests\AmongUs.Tests.csproj", "{C1385C67-A7DD-46D2-80F6-FA428B85FB22}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{56DD9707-D811-4056-9E2C-8A9CC2479B07}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AmongUs.Tools.Proxy", "AmongUs.Tools.Proxy\AmongUs.Tools.Proxy.csproj", "{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -71,6 +75,14 @@ Global
|
||||
{C1385C67-A7DD-46D2-80F6-FA428B85FB22}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C1385C67-A7DD-46D2-80F6-FA428B85FB22}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C1385C67-A7DD-46D2-80F6-FA428B85FB22}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -80,5 +92,6 @@ Global
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{02CFBD30-D77D-400F-94B2-700F60EFDD7F} = {DFA3CC6A-A27C-4713-876D-A55912C78C45}
|
||||
{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D} = {56DD9707-D811-4056-9E2C-8A9CC2479B07}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Submodule submodules/Hazel-Networking updated: a12a40e915...314637e6aa.
Reference in new issue
Block a user