gpt4 book ai didi

c# - 无法使用原始套接字读取传入的响应

转载 作者:行者123 更新时间:2023-11-30 14:02:58 26 4
gpt4 key购买 nike

我正在尝试通过监听原始套接字通过代码读取来自网站的响应,但到目前为止我只能读取我的计算机发送的传出请求,而不是我实际上正在读取的传入响应有兴趣。我该如何阅读收到的回复?

编辑:使用 Wireshark 我发现我正在寻找的数据是通过 TCP 发送的,我相信。

Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Unspecified);
IPAddress localIP = Dns.GetHostByName(Dns.GetHostName()).AddressList[0];
listener.Bind(new IPEndPoint(localIP, 0));
byte[] invalue = new byte[4] { 1, 0, 0, 0 };
byte[] outvalue = new byte[4] { 1, 0, 0, 0 };
listener.IOControl(IOControlCode.ReceiveAll, invalue, outvalue);
while (true)
{
byte[] buffer = new byte[1000000];
int read = listener.Receive(buffer);
if (read >= 20)
{
Console.WriteLine("Packet from {0} to {1}, protocol {2}, size {3}",
new IPAddress((long)BitConverter.ToUInt32(buffer, 12)),
new IPAddress((long)BitConverter.ToUInt32(buffer, 16)),
buffer[9],
buffer[2] << 8 | buffer[3]
);
}
}

最佳答案

端口 0 表示他将监听所有端口,我认为您需要将 ProtocolType.Unspecified 设置为 ProtocolType.IP。

新套接字(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Raw);从我在 msdn 上读到的内容来看,是针对 ipv6 的,只有 ProtocolType.IP 支持带有原始套接字的 ipv4。

我还认为这是一个无连接套接字,对吗?除非是这种情况,否则 Reciveall 不会真正产生影响。如果你在寻找 ip header ,你可以通过设置如下代码来获取它:

Socket sck = new Socket( AddressFamily.InterNetwork  , SocketType.Raw  , ProtocolType.IP);
sck.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);

希望这有帮助:)

关于c# - 无法使用原始套接字读取传入的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com