2010-01-04 46 views
6

我正尝试在C#中编写一个端口扫描器。我对端口扫描方法做了一些研究。在C#中实现所有端口扫描技术/在C#中创建原始低级数据包

如果你有兴趣,这些都是 链接,我发现有用:

  1. http://www.cs.wright.edu/~pmateti/InternetSecurity/Lectures/Probing/index.html^PPT Presentation^
  2. http://www.auditmypc.com/freescan/readingroom/port_scanning.asp
  3. (旧)NMAP - 端口扫描的艺术:http://nmap.org/nmap_doc.html
  4. 端口扫描技巧:http://nmap.org/book/man-port-scanning-techniques.html
  5. 端口扫描互动举例:http://www.osischool.com/concept/communication/port-scanning

来到我的问题。这些是端口扫描方法:

  1. TCP连接()扫描
  2. TCP SYN扫描
  3. TCP FIN扫描
  4. TCP XMAS扫描
  5. TCP NULL扫描
  6. TCP窗口扫描
  7. UDP扫描

但我只实现了TCP Connect() Scan(显示here)。但是这个速度很慢(测试每个端口的时间> 0.5秒)。为了实现其余的方法,我需要数据包级访问。我需要创建原始数据包。在C#中可以这样做吗?如果是这样怎么办?

+0

如果源代码可用,我很想知道它是如何发布的。 – 2010-01-07 16:36:37

回答

1

你必须有一个驱动程序(NDIS)或类似的东西来访问原始数据包。您可能还需要使用Native Win32 API并使用P/Invoke。

这里的东西,以帮助: http://www.codeproject.com/KB/IP/sendrawpacket.aspx

+0

对于较低级别数据包访问最常用的驱动程序随附WinPcap。 – 2010-11-10 08:27:15

2

这似乎是围绕着很大的WinPcap库是一个好的包装,当我很久以前使用过它:

http://sourceforge.net/projects/sharppcap/

我敢肯定,这是更好现在。

+0

现在好多了。这个API终于成熟了,所以它的方法已经非常成熟,并且解析已经从SharpPcap移出到了Packet.Net项目。现在比以前更容易使用。 – 2010-11-10 08:29:22