2013-04-10 34 views
2

我學習Python的網絡編程:用TCP,UDP,ICMP,ARP等協議編寫客戶端服務器和客戶端客戶端軟件。Python編程:模擬網絡和調試

我需要有N個主機具有以下capabilites網絡仿真工具:

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

+0

另外我有一個通過請求lib或pycurl到遠程站點的GET請求。我如何包裝我的Python腳本來捕獲該請求併爲我自己做出響應(用於調試和單元測試)**而不更改源代碼**? – lansman 2013-04-10 09:48:59

回答

0

你必須編寫自己的代碼來覆蓋你的確切規格。

  1. 您可以使用具有不同端口的一臺服務器來模擬多個服務器,以適用於每臺主機 - 如果您想爲每臺主機提供不同的IP,則需要了解如何創建虛擬網絡連接。
  2. 要控制網絡噪音,您可以將randomtime.sleep語句添加到您的python服務器應用程序。
  3. 如果您自己編寫代碼,您可以在不同的端口上設置不同的應用程序以不同的方式進行響應。
  4. 對於日誌記錄,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() 

東西只需更換myapp與要被執行Python命令服務蟒蛇請求。

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 

後來又使每個aplication實例的偵聽其他接口。

但是,如果您需要從不同的ifaces發送軟件包,則每次執行操作時都必須重新配置路由表。這並不包括你指定的其他功能。

我會去一些輕量級,高度可配置的Linux發行版,而無需在單獨的虛擬機上使用ui。