使用c#的原始套接字

本文关键字:套接字 原始 使用 | 更新日期: 2023-09-27 18:09:34

我想用c#写一个端口扫描器,我不能使用SocketType。从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 with Service Pack 2 (SP2)和Windows XP with Service Pack 3 (SP3)上,通过原始套接字发送流量的能力在以下几个方面受到限制:

  • TCP数据不能通过原始套接字发送。
  • 源地址无效的UDP数据报不能通过原始套接字发送。任何传出的UDP数据报的IP源地址必须在网络接口上存在,否则该数据报将被丢弃。此更改是为了限制恶意代码创建分布式拒绝服务攻击的能力,并限制发送欺骗数据包(具有伪造源IP地址的TCP/IP数据包)的能力。
  • 不允许使用IPPROTO_TCP协议的原始套接字调用bind函数。
    bind函数允许使用原始套接字,其他协议(如IPPROTO_IP, IPPROTO_UDP, IPPROTO_SCTP)

使用c#的原始套接字

请注意nmap是如何做到这一点的,现在我相信您的选择是在以太网帧上转到较低的级别。

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

这就引出了:

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

就像这样:

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

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

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

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