2013-04-10 86 views
2

我学习Python的网络编程:用TCP,UDP,ICMP,ARP等协议编写客户端服务器和客户端客户端软件。Python编程:模拟网络和调试

我需要有N个主机具有以下capabilites网络仿真工具:

  1. ,可以创建n个

    轻量级的软件(2,5,10,......)的主机与他们每个人的Python解释器(全部在我的电脑上!)。像Virtualbox这样的虚拟机看起来太重了,并且强加了令人难以置信的RAM要求。我只需要python解释器和网络堆栈支持。

  2. 配置像整个网络质量“丢弃分组的10%”或“使信号延迟到500毫秒”

  3. 配置为每个主机隔开一定的请求的响应的能力的能力。像“从主机#5 ping到google.com应该返回”远程网络不可达“,但”从主机#5 ping到yahoo.com“应该没问题。

  4. 当然,有一个完整的日志记录发生了什么在我的网络。

是否有这样的软件或框架(适用于Windows 7和Linux)?

+0

另外我有一个通过请求lib或pycurl到远程站点的GET请求。我如何包装我的Python脚本来捕获该请求并为我自己做出响应(用于调试和单元测试)**而不更改源代码**? – lansman 2013-04-10 09:48:59

回答

0

你必须编写自己的代码来覆盖你的确切规格。

  1. 您可以使用具有不同端口的一台服务器来模拟多个服务器,以适用于每台主机 - 如果您想为每台主机提供不同的IP,则需要了解如何创建虚拟网络连接。
  2. 要控制网络噪音,您可以将randomtime.sleep语句添加到您的python服务器应用程序。
  3. 如果您自己编写代码,您可以在不同的端口上设置不同的应用程序以不同的方式进行响应。
  4. 对于日志记录,python logging模块非常好。

Python有一个simple HTTP server内置:

import SimpleHTTPServer 
import SocketServer 

PORT = 8000 

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 

httpd = SocketServer.TCPServer(("", PORT), Handler) 

print "serving at port", PORT 
httpd.serve_forever() 

,或者你可以使用像FastCGI

def myapp(environ, start_response): 
    start_response('200 OK', [('Content-Type', 'text/plain')]) 
    return ['Hello World!\n'] 

if __name__ == '__main__': 
    from fcgi import WSGIServer 
    WSGIServer(myapp).run() 

东西只需更换myapp与要被执行Python命令服务蟒蛇请求。

0

收听只有你可以创建多个接口(别名)这样的:

ifconfig eth0:0 192.168.5.12 netmask255.255.255.0 up 
ifconfig eth0:1 192.168.5.13 netmask255.255.255.0 up 

后来又使每个aplication实例的侦听其他接口。

但是,如果您需要从不同的ifaces发送软件包,则每次执行操作时都必须重新配置路由表。这并不包括你指定的其他功能。

我会去一些轻量级,高度可配置的Linux发行版,而无需在单独的虚拟机上使用ui。