我在Python上学习网络编程:使用TCP,UDP,ICMP,ARP等协议编写客户端 - 服务器和客户端 - 客户端软件。
我需要一个工具来模拟具有以下功能的N个主机的网络:
轻量级软件可以在每个主机上创建带有python解释器的N(2,5,10,...)主机(都在我的计算机上!)。像Virtualbox这样的虚拟机看起来太沉重,并且需要令人难以置信的RAM。我只需要python解释器和网络堆栈支持。
配置整个网络质量的功能,如“丢弃10%的数据包”或“使信号延迟达到500毫秒”
能够为每个主机配置对某些请求的响应。就像“从主机#5 ping google.com应该返回”远程网络无法访问“但是”从主机#5 ping到yahoo.com“应该没问题。
当然,我的网络中有完整的日志记录。
是否有这样的软件或框架(适用于Windows 7和Linux)?
答案 0 :(得分:0)
您必须编写自己的代码以涵盖您的确切规格。
random
和time.sleep
语句添加到您的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()
只需用你想要执行的python命令替换myapp
。
答案 1 :(得分: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
稍后,您将在应用程序的每个实例上侦听另一个接口。
但是,如果您需要从不同的ifaces发送包,则每次执行时都必须重新配置路由表。这并不包括您指定的其他功能。
我会选择一些轻量级,高度可配置的Linux发行版,而不需要ui在不同的虚拟机上。