我想通过监听原始套接字通过代码从网站读取响应,但迄今为止,我只能读取由我的计算机发送的传出请求,而不是我真正感兴趣的即将到来的回复。 我该如何去阅读传入的回复?无法使用原始套接字读取传入响应
编辑:使用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
新的IPEndPoint(localIP,0)指定您要侦听端口0.是否是远程服务器连接的端口? –
2011-01-30 03:35:43
+0
@RobertLevy - `new IPEndPoint(localIP,0)`指定你不关心你使用的是什么本地端口。当(如果)你需要一个时,系统将选择一个。 (绑定,发送,接收,...)对于设置了ReceiveAll的RAW套接字,您永远不需要一个,因为您正在接收所有内容。 –
2015-03-23 04:34:31