这个需要考察NAT的机理.我并不赞成LZ文章里分析的所谓AV的做法,那样几乎不太可能.一个ISP可能有数千台服务器,光是这个分析成本就已经很恐怖了.
如果给我做,相对简单得多,当然,这首先要请大家看过以下这篇文章,对NAPT的原理有一定的了解以后,才能思考我说的到底有没有道理:
http://blog.csdn.net/gudulyn/archive/2006/05/01/704729.aspx
以下事实是我的实现前提:
1.NAPT是通过路由器的端口绑定的.
2.NAPT技术分配端口是随机或者伪随机的.
3.主流的软件使用的端口号是固定的.
因此,如果我是AV,只要在一个确认为正常的没有使用NAPT技术的电脑所发送的数据包上分析其端口,将所有应用频繁的端口制作成一个表,然后用这个表来比照其他的路由器接受到的目的端口,一旦用户发出的数据包所指定的端口号不在该表内,达到一定的数量,就自动认为该用户使用了NAPT技术.
这样,只要一段时间内更新这个端口表,就可以有效的控制NAPT的使用.
LZ分析的方法有一个缺陷,就是没有考虑到,如果该用户使用了多操作系统的话,他的方法就会产生误杀.
验证到底AV是使用了LZ的方式还是我的方式的一个方法就是,首先使用自定义连接的TCP (可以通过nc,C,JAVA等语言或工具实现,现在Emacs也提供了TCP连接模块),在预设的客户端和服务器端进行大量的随机的通信;如果没有被发现,使用不同的操作系统,使用主流端口大量的发送数据,如果此时被查出,则LZ正确.颠倒过来,被发现,则我的正确.
小弟无法对这个方法进行验证,还请见谅.
[
本帖最后由 沦为神 于 2008-1-19 04:39 编辑 ]