我想在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数据包)的能力.
- 不允许
bind使用IPPROTO_TCP协议的原始套接字调用该函数.
注意 的bind具有原始套接字函数被允许用于其它协议(IPPROTO_IP,IPPROTO_UDP,或IPPROTO_SCTP,例如).