在 C# 中使用原始套接字

2024-01-01

我想用 C# 编写一个端口扫描器,但无法使用 SocketType.Raw,因为原始套接字是从 Windows 桌面版本中取出的。我无法使用 SharpPcap 或 Winpcap 的其他包装器,因为我使用 PPPoE 进行互联网连接,而 Winpcap 不支持 PPP 设备。

我需要使用一个实现原始套接字并且不依赖 winpcap 的库。

有任何想法吗?基本上我需要发送 SYN,接收 SYN/ACK 或 RST,但不发回 ACK。

edit:

对于那些不相信 RAW 套接字已从桌面版 Windows 中消失的人,请参阅此处:http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx

在 Windows 7、Windows Vista、带有 Service Pack 2 (SP2) 的 Windows XP 和带有 Service Pack 3 (SP3) 的 Windows XP 上,通过原始套接字发送流量的能力在多种方面受到限制:

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

请注意 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 http://www.codeproject.com/KB/IP/sendrawpacket.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中使用原始套接字 的相关文章

随机推荐