用Linux的iptables和Python模拟广域网

转载自:http://www.cnblogs.com/yushih/archive/2010/06/01/1749378.html


更新:哥现在已经发展出了基于TUN/TAP+脚本语言的更成熟、稳定的技术,所以下面的内容算是废了。 

首先声明:本人只是试验成功,还没有进行过严格正确性、性能和稳定性的实验。以下程序可能存在bug。使用者自己注意。


问题 :有人在豆瓣Python版提出“在一台PC上模拟多个IP地址向服务器发起socket连接,并在建立连接后发数据包“的需求。具体要求是“可以在 界面上输入想要模拟的IP地址的范围,比如我想模拟100个用户,就输入192.168.4.100——192.168.4.200,然后自动以这些IP 地址向服务器发socket连接和一些数据“,“服务器侧是一个注册系统,以IP和序列号区分不同用户,我要想进行压力测试必须模拟不同的IP地址“。环 境是“测试所有使用的都是私网地址,而且环境比较独立,所以不必考虑NAT和IP冲突问题“。限制:”服务器侧要是能动就好了,就是不能改动“。以下是我 的解决方法。

搭建环境 :服务器端环境不限。客户端必须是Linux。服务器和客户直接通过LAN连接。以上只是逻辑要求,可以用虚拟机在一台电脑上实现。客户端ip地 址设置为cip,掩码nm,服务器端ip地址设置为sip(sip&nm == cip&nm),掩码nm,缺省网关cip(注意,是把服务器的缺省网关地址设置为客户ip地址。课后练习:为什么?)。

软件安装 :在客户端装nfqueue-bindings(http://software.inl.fr/trac/wiki/nfqueue- bindings)。有大量的依赖需要安装,不过不需要Perl,只要把CMakeLists.txt中“ADD_SUBDIRECTORY(perl) “这一行去掉。另外libnetfilter-queue要自己下载编译安装,至少在我的机器上用rpm安装后nfqueue-bindings不认。

运行ip模拟器 :在客户端以root权限运行wansim.py(代码在后面),命令行参数为:
python wansim.py sip cip ip_range
其中sip为上面设置的服务器ip,cip为上面设置的客户端机器ip,ip_range为要模拟的ip范围,例如:
1.1.1.1-254

1.1.1-254.1-254

222-235.1-8.2.3-6 

限制:模拟ip不能进入客户端-服务器所用LAN的子网ip范围,即对任何模拟ip地址fip:fip&nm != sip&nm(课后作业:为什么?)。
ip模拟器开始运行后,所有从客户端发起到服务器端的tcp会话将被ip模拟器从指定ip范围中随机分配一个ip。服务器程序看到的是这个模拟的ip,而不是cip。

运行:运行服务器。在客户机上运行客户端测试软件。以下是我Windows上服务器看到的效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值