2

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

4

2 回答 2

0

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

  1. 您可以使用一台服务器为每台主机使用不同端口来模拟多台服务器 - 如果您想要为每台主机使用不同的 IP,您需要弄清楚如何创建虚拟网络连接。
  2. 要控制网络噪音,您可以向您的 python 服务器应用程序添加random和语句。time.sleep
  3. 如果您自己编写代码,您可以在不同的端口上设置不同的应用程序以不同的方式响应。
  4. 对于日志记录,pythonlogging模块非常好。

Python 内置了一个简单的 HTTP 服务器

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

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

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

或者你可以使用类似的东西来服务 python 请求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 命令。

于 2013-04-10T08:20:36.013 回答
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

稍后,您使应用程序的每个实例都在另一个接口上侦听。

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

我会在单独的虚拟机上使用一些没有 ui 的轻量级、高度可配置的 linux 发行版。

于 2013-04-10T08:35:17.720 回答