如何在c#中实现UDP端口扫描?

时间:2014-04-02 17:33:17

标签: c# udp port

好吧,我设法实现了TCP端口扫描,但我不知道如何为UDP做同样的事情。 我意识到,在UDP中,如果出现ICMP错误,您可以知道端口是否已关闭。 否则你可以假设端口是开放的。 和建议?

1 个答案:

答案 0 :(得分:-1)

扫描UDP非常困难。 nmap的文档简要介绍了其工作原理:

UDP Scan (-sU)

这是the german nmap site的翻译报价:

通过UDP扫描,空的UDP标头(无数据)被发送到所有目标端口。如果返回ICMP端口不可达错误(类型3,代码3),则说明该端口已关闭。其他ICMP无法访问的错误(类型3,代码1、2、9、10或13)将端口标记为已过滤。有时,服务将以UDP数据包作为响应,以证明它是开放的。如果几次重传后仍未收到响应,则该端口被分类为open |过滤。这意味着端口可能是开放的,或者有阻止通信的数据包筛选器。

...

速度是UDP扫描的一大挑战。打开和筛选的端口很少响应,从而导致Nmap在测试数据包或响应丢失的情况下超时并重新发送其请求。封闭端口通常是一个更大的问题。它们通常会发回ICMP端口无法访问的错误消息。但是,与关闭的TCP端口为响应SYN或Connect扫描而发送的RST数据包不同,默认情况下,许多主机会限制ICMP端口不可达消息的速率。 Linux和Solaris特别严格。 Linux内核2.4.20例如将目标不可达消息限制为每秒一则。