【发布时间】:2011-09-23 18:18:15
【问题描述】:
我想用 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、带有 Service Pack 2 (SP2) 的 Windows XP 和带有 Service Pack 3 (SP3) 的 Windows XP 上,通过原始套接字发送流量的能力受到以下几个方面的限制:
- 无法通过原始套接字发送 TCP 数据。
- 具有无效源地址的 UDP 数据报不能通过原始套接字发送。任何传出 UDP 数据报的 IP 源地址必须存在于网络接口上,否则数据报将被丢弃。此更改旨在限制恶意代码创建分布式拒绝服务攻击的能力,并限制发送欺骗数据包(具有伪造源 IP 地址的 TCP/IP 数据包)的能力。
- 不允许使用
IPPROTO_TCP协议的原始套接字调用bind函数。
注意其他协议允许使用原始套接字的bind函数(例如IPPROTO_IP、IPPROTO_UDP或IPPROTO_SCTP)。
【问题讨论】:
-
在对答案进行投票之前,请了解什么是原始套接字,并且它不仅仅是在 .net 中使用套接字
-
纯学术评论:你不能写你自己的 WinSock DLL 吗?编写了原始套接字并且必须自己在 UNIX/LINUX 中执行 TCP,我认为应该是可能的。
标签: c# tcp raw-sockets