Python编程:模拟网络和调试

时间:2013-04-10 08:11:22

标签: python debugging networking emulation

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

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

  1. 轻量级软件可以在每个主机上创建带有python解释器的N(2,5,10,...)主机(都在我的计算机上!)。像Virtualbox这样的虚拟机看起来太沉重,并且需要令人难以置信的RAM。我只需要python解释器和网络堆栈支持。

  2. 配置整个网络质量的功能,如“丢弃10%的数据包”或“使信号延迟达到500毫秒”

  3. 能够为每个主机配置对某些请求的响应。就像“从主机#5 ping google.com应该返回”远程网络无法访问“但是”从主机#5 ping到yahoo.com“应该没问题。

  4. 当然,我的网络中有完整的日志记录。

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

2 个答案:

答案 0 :(得分:0)

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

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

    之类的东西来提供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()
    

    只需用你想要执行的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在不同的虚拟机上。