C# 如何在C中创建数据包#

C# 如何在C中创建数据包#,c#,packets,C#,Packets,我一直想知道一个游戏怎么会产生这样的数据包: 22 00 11 00 6D 79 75 73 65 72 6E 61 6D 65 00 00 00 00 00 00 6D 79 70 61 73 73 77 6F 72 64 00 00 00 00 00 00 LENGTH-HEADER-USERNAME-PASSWORD 在游戏代码中,它们的功能应该是什么,或者它们是如何编写类似的东西的?它仅仅是编码.ASCII.GetBytes(“一些字符串值”)?尽管我怀疑它是这样写的 每次我试图问某

我一直想知道一个游戏怎么会产生这样的数据包:

22 00 11 00 6D 79 75 73 65 72 6E 61 6D 65 00 00 00 00 00 00 6D 79 70 61 73 73 77 6F 72 64 00 00 00 00 00 00

LENGTH-HEADER-USERNAME-PASSWORD
在游戏代码中,它们的功能应该是什么,或者它们是如何编写类似的东西的?它仅仅是
编码.ASCII.GetBytes(“一些字符串值”)
?尽管我怀疑它是这样写的


每次我试图问某人这个问题时,他都认为我想分析数据包。我不知道-我想知道我需要做什么才能创建一个像上面那样的数据包,用C#编写。

您输入的示例代码应该将字符串转换为字节数组。根据您使用的编码(例如ASCII、Unicode等),您可能会从同一字符串中获得不同的字节数组

“数据包”一词通常在通过网络发送数据时使用;但数据包本身只是字节数组

你得到的信息是我的用户名,密码。下面的C代码将为您翻译

        byte[] packet = new byte[] { 0x22, 0x00, 0x11, 0x00, 0x6D, 0x79, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x79, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
        string test = Encoding.ASCII.GetString(packet);
        Console.WriteLine(test);
        Console.ReadKey();
因此,要创建类似的内容,我会尝试:

    const int HeaderLength = 2;
    const int UsernameMaxLength = 16;
    const int PasswordMaxLength = 16;
    public static byte[] CreatePacket(int header, string username, string password)//I assume the header's some kind of record ID?
    {
        int messageLength = UsernameMaxLength + PasswordMaxLength + HeaderLength;
        StringBuilder sb = new StringBuilder(messageLength+ 2);
        sb.Append((char)messageLength);
        sb.Append(char.MinValue);
        sb.Append((char)header);
        sb.Append(char.MinValue);
        sb.Append(username.PadRight(UsernameMaxLength, char.MinValue));
        sb.Append(password.PadRight(PasswordMaxLength, char.MinValue));
        return Encoding.ASCII.GetBytes(sb.ToString()); 
    }
然后调用以下代码:

byte[] myTest = CreatePacket(17, "myusername", "mypassword");

当然,使用字符串生成器与数据包结构相差甚远,您必须使用byte[]并通过索引向其添加值。

考虑到您在前面的类似问题中对prevision链接评论的负面反应,我不愿意发布此消息,但可能会有所帮助?游戏或网络数据包??需要更多的解释这是一个从游戏中嗅出的小包。这个问题缺少显示您确实知道如何发送某些内容的代码,说明如何发送特定数据要比说明如何发送数据容易得多。我知道发送消息的唯一方法是使用socket.send(Encoding.ASCII.GetBytes(“Hello World”);发送类似Hello World这样的字符串消息;。但我完全不知道如何发送包含长度id用户名密码的数据消息好吧,我理解,但我想知道的是这样的数据包是如何创建的?我的意思是如何为服务器编写数据消息?伙计,我不想翻译,我想知道这样的东西是如何从(数据包)开始创建的?!!。假设我想发送一个具有这种结构的数据包:大小、头、用户名、密码。我该怎么办?看看这里的例子,它们可能涵盖了你想要的东西:对不起,虽然我不想让你生气,但我在乞求一个正确的答案!。我想要的不是向世界问好。我想知道如果我想创建一个像上面一样的包,我应该怎么做?(发送数据,如果嗅探给我与上述数据包相同)感谢您的重播,我注意到,从一个时间,但您的评论是感激的。