我用Python学习网络编程:用TCP, UDP, ICMP, ARP等协议编写客户端-服务器和客户端-客户端软件。
我需要一个工具来模拟网络与N主机具有以下功能:
-
轻量级软件,可以创建N(2,5,10,…)个主机,每个主机上都有python解释器(都在我的计算机上!)像Virtualbox这样的虚拟机似乎太重了,而且对RAM的要求高得惊人。我只需要python解释器和网络栈支持。
-
配置整个网络质量的能力,如"减少10%的数据包"或"使信号延迟到500毫秒"
-
为每个主机分别配置对某些请求的响应的能力。就像"从主机#5 ping到google.com"应该会返回"远程网络不可达",但"从主机#5 ping到yahoo.com"应该没问题。
-
当然有一个完整的日志记录在我的网络中发生了什么。
是否有这样的软件或框架(用于Windows 7和Linux)?
您必须编写自己的代码来满足您的确切规格。
- 你可以模拟多个服务器使用一个服务器与不同的端口为每个主机-如果你想为每个主机不同的IP你需要弄清楚如何创建虚拟网络连接。 为了控制网络噪声,你可以在python服务器应用程序中添加
- 你可以设置不同的应用程序在不同的端口以不同的方式响应,如果你自己写代码。
- 对于日志记录,python的
logging
模块是优秀的。
random
和time.sleep
语句。Python内置了一个简单的HTTP服务器:
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命令。
对于监听,您可以创建多个接口(别名),如下所示:
ifconfig eth0:0 192.168.5.12 netmask255.255.255.0 up
ifconfig eth0:1 192.168.5.13 netmask255.255.255.0 up
之后,让应用程序的每个实例侦听另一个接口。
但是如果你需要从不同的接口发送包,你就必须每次都重新配置路由表。这还不包括您指定的其他功能。
我会选择一些轻量级的,高度可配置的,没有ui的linux发行版在单独的虚拟机上。