我需要实现UDP协议。 PC必须在专用的UDP端口侦听传入的数据包。它还发送数据包(答案)。该应用程序在Windows XP,7,8,....上运行。
Windows防火墙阻止传入的数据包。这可以通过UDP打孔来规避。所以我必须发送一些不应该受伤的东西。但我想尽可能少打扰。
答案 0 :(得分:4)
以下是我用netcat测量的方法:
在我的Unix主机(Mac OS X Darwin)上,没有防火墙(或Windows防火墙允许netcat“nc”可执行文件在UDP端口上侦听的Windows机器上),我运行一个由可变延迟提供的UDP服务器远程客户:
WINHOST=10.116.140.69
mkfifo f
nc -u -p 2222 $WINHOST 6666 < f | \
(while read secs; do for sec in $secs; do echo sleep $sec 1>&2; sleep $sec; echo SLEPT $sec; echo SLEPT $sec 1>&2; done; done) > f
在我的Windows主机(Windows 7 Professional SP1 64位),Windows防火墙上安装了cygwin以提供shell和netcat,我以交互方式运行UDP客户端:
UNIXHOST=192.168.181.1
nc -u -p 6666 $UNIXHOST 2222
你不必使用cygwin; Windows netcat应该可以正常工作,但命令行可能会有所不同。
然后进入该客户端我输入一系列测试间隔,观察服务器休眠然后响应,观察客户端是否得到响应。这些工作:1,2,10,60,120,180。然后失败了:240。继续进行180到240之间的二进制搜索。
示例1:在客户端,我输入:
10
60
120
180
240
并观察到请求 - 响应延迟最多180个工作,240不工作。
示例2:在客户端,我输入:
180
181
182
182
并观察到请求 - 响应延迟最多181个工作,182不工作。
示例3:在客户端,我输入(全部在同一行):
180 180 180 181 181 181 182 182 182 183 183 183
从客户端生成一个UDP请求,然后是由180,181,182或183秒间隔分隔的一系列响应。据观察,最多181个请求 - 响应延迟工作,此外,持续响应(没有新请求),间隔时间长达181秒。
因此防火墙漏洞具有不活动计时器,而不考虑初始响应中的不活动是否延迟,或后续的额外流量。
多台机器上的结果:
我有兴趣在不同操作系统级别和防火墙配置的其他Windows机器上看到类似的测量结果。
答案 1 :(得分:2)
关于打孔的一些提示:
我的建议是实现客户端程序忽略的KEEP_ALIVE数据包,并让服务器定期向客户端发送KEEP_ALIVE数据包以保持防火墙处于打开状态。这假设您知道客户端的IP,因此您可以向其发送KEEP_ALIVE数据包。如果您还不知道客户端的IP,则必须设置可公开访问的桥接计算机或为您的服务器程序禁用防火墙。 Windows防火墙具有COM API或netsh命令,可用于允许程序侦听连接。对于硬件防火墙/ NAT,您可以尝试使用UPNP。如果这不起作用,那么您可以做的最好的事情是请求用户打开程序的特定端口。
答案 2 :(得分:1)
回答我自己的问题:没有办法确定超时。您需要尝试Windows 7防火墙用于UDP连接的超时时间。目前的经验显示四秒钟超时,但这可能会有所不同。
打孔的一些一般提示: