問題描述:
在設備中有3個NI, ip分別為192.168.1.5/6/7。其中本端192.168.1.6同對端192.168.1.10建立了一個tunnel。
我希望測試tunnel連通性, 對端起一個socket server。本段作為client。
但是如果本端client直接連接,使用的源ip為192.168.1.5,端口隨機。
我的迷惑在尋找一個指定ip的函數,在看了python的manual document中socket部分看了一遍后,沒有找到這個函數。
隨后我意識到我的一個思維誤區:bind()函數
bind(address)之前作為socket server的一部分,啟動時候使用制動server的ip和端口
但是bind在客戶端一樣的作用。指定socket建立鏈接時使用的ip和端口。
代碼:
def start_tcp_client(ip, port): #server port and ip server_ip = ip servr_port = port tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: tcp_client.bind(('192.168.1.6', 11560)) tcp_client.connect((server_ip, servr_port)) except socket.error: print 'fail to setup socket connection' else: print 'sending..........' tcp_client.sendall("echo message") print 'reading...........' print tcp_client.recv(1024) tcp_client.close()
搞定!