Python编程:模拟网络和调试



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

我需要一个工具来模拟网络与N主机具有以下功能:

  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)?

您必须编写自己的代码来满足您的确切规格。

  1. 你可以模拟多个服务器使用一个服务器与不同的端口为每个主机-如果你想为每个主机不同的IP你需要弄清楚如何创建虚拟网络连接。
  2. 为了控制网络噪声,你可以在python服务器应用程序中添加randomtime.sleep语句。
  3. 你可以设置不同的应用程序在不同的端口以不同的方式响应,如果你自己写代码。
  4. 对于日志记录,python的logging模块是优秀的。

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

之类的东西来提供python请求
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发行版在单独的虚拟机上。

最新更新