C#获取数据包

标签 c# sockets http-headers packets

我一直在尝试编写一个脚本来嗅探 HTTP header 。到目前为止,我已经将套接字绑定(bind)到端口 80,并且似乎收到了数据包,但我无法将它们转换为字符串形式。所有输出都是连续的“E”。我之前把字节改成了十六进制,好像有一些数据进来了,但是现在的代码无法把字节改成字符串。是否有其他一些解码字节的方法可以提供正确的字符串?

byte[] input = BitConverter.GetBytes(1);
byte[] buffer = new byte[4096];
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
s.Bind(new IPEndPoint(IPAddress.Parse(strIP), 80));
s.IOControl(IOControlCode.ReceiveAll, input, null);
int bytes;
bytes = s.Receive(buffer);
while (bytes > 0)
{
    log(System.Text.Encoding.ASCII.GetString(buffer, 0, bytes));
    bytes = s.Receive(buffer);
}

最佳答案

当您使用原始 套接字嗅探数据时,您正在接收互联网协议(protocol) (IP) 数据包。每个 IP 数据包都以 IP header 开头.此 header 通常有 20 个字节长,但也可以更长。 IP header 之后是传输层的 header ,例如 Transmission Control Protocol (TCP) header 或 User Datagram Protocol (UDP) header 。在此 header 之后是您要查找的数据,即 HTTP。因此,当您解析数据时,您需要先跳过 IP header 和传输层 header 。

关于C#获取数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1850948/

相关文章:

java - X-Frame-Options 支持同一域的不同子域

c# - 如何检查 Xamarin.Android 中的内存泄漏?

javascript - 将参数从 jsonresult 传递到 actionresult

c# - 无法处理文件 resx,因为它位于 Internet 或受限区域或文件上有 web 标记

c# - 何时关闭 UDP 套接字

java - 如何在一个线程中读取SocketChannel,并从n个线程中写入?

c# - 为什么C#禁止接口(interface)成员的内部访问?

python - 在 Python 中使用 getattr 调用函数

JavaScript 和重定向位置 : header detection

javascript - 如何让我的 CSS 和 JS 文件发送 HTTP 响应 header