Tag: raw socket

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

我试图通过监听原始套接字来读取网站上的响应,但到目前为止,我只能读取我的计算机发送的传出请求,而不是我真正感兴趣的传入响应。我怎样才能阅读传入的回复? 编辑:使用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 […]

使用C#的原始套接字

我想在C#中编写一个端口扫描程序,我不能使用SocketType.Raw,因为原始套接字是从桌面版本的Windows中取出的。 我不能使用SharpPcap或Winpcap的其他包装器,因为我使用PPPoE进行互联网连接,而Winpcap不支持PPP设备。 我需要使用一个实现原始套接字的库,而不依赖于winpcap。 有任何想法吗? 基本上我需要发送SYN,接收SYN / ACK或RST但不发送ACK。 编辑: 对于那些不相信RAW套接字从Windows桌面版本中消失的人,请看这里: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v = vs。85).aspx 在Windows 7,Windows Vista,Windows XP Service Pack 2(SP2)和Windows XP Service Pack 3(SP3)上,通过原始套接字发送流量的能力受到以下几种限制: TCP数据无法通过原始套接字发送。 无法通过原始套接字发送具有无效源地址的UDP数据报。 任何传出UDP数据报的IP源地址必须存在于网络接口上,否则数据报将被丢弃。 此更改旨在限制恶意代码创建分布式拒绝服务攻击的能力,并限制发送欺骗数据包(具有伪造源IP地址的TCP / IP数据包)的能力。 不允许使用IPPROTO_TCP协议的原始套接字调用bindfunction。 注意其他协议(例如IPPROTO_IP , IPPROTO_UDP或IPPROTO_SCTP )允许使用带原始套接字的bindfunction。