使用C#的原始套接字

时间:2011-09-23 18:18:15

标签: c# tcp raw-sockets

我想在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_IPIPPROTO_UDPIPPROTO_SCTP
  •   

3 个答案:

答案 0 :(得分:2)

请注意nmap是如何做到的,现在我相信你的选择是在以太网框架上进入较低级别。

“Nmap仅支持原始数据包扫描的以太网接口(包括大多数802.11无线网卡和许多VPN客户端)。除非使用-sT -Pn选项,否则不支持RAS连接(如PPP拨号)和某些VPN客户端当Microsoft在Windows XP SP2中删除原始TCP / IP套接字支持时,此支持被删除。现在Nmap必须发送更低级别的以太网帧。“

所以 - 这将我们带到:

http://www.codeproject.com/KB/IP/sendrawpacket.aspx

答案 1 :(得分:0)

就像这样:

http://www.winsocketdotnetworkprogramming.com/clientserversocketnetworkcommunication8h.html

此外,它在什么时候从Windows中删除?我上周为朋友做了一个聊天客户端;同样,http://msdn.microsoft.com/en-us/library/system.net.sockets.sockettype.aspx仍将其列为活动状态。

答案 2 :(得分:-6)

尝试以管理员身份运行Visual Studio

右键单击--->以管理员身份运行

然后用raW套接字执行程序..