2
所以我試圖在python中創建隧道協議。我有tun接口設置,通過它路由所有的流量。 但是現在如何獲得正在重定向到我的程序中的tun接口的數據包以加密它們並將它們發送到服務器? 從我看到它是要麼是socket.bind()或socket.setsockopt()函數。 這是我的接口設置從python網絡接口讀取和處理數據包
而這個代碼,我使用的現在:
import os, sys
from select import select
f = os.open("/dev/tun0", os.O_RDWR)
os.system("ifconfig tun0 add 10.6.0.1 10.6.0.2")
os.system("ip route add 0/1 dev tun0")
try:
while 1:
r = select([f],[],[])[0][0]
if r == f:
packet = os.read(f, 4000)
print(str(len(packet)) + " : " + str(packet))
except KeyboardInterrupt:
print ("Stopped by user.")
os.system("ip route delete 0/1 dev tun0")
這從設備直接讀取。那麼有沒有辦法使用套接字庫分別讀取數據包?
謝謝。
OS:MacOS的塞拉利昂
混雜模式可能不是要走的路,我的tun0接口設置了一個點對點,再看看我的問題,我添加了詳細信息 –
爲什麼不呢?通過在混雜模式下的套接字和s.readfrom(),您可以獲得一個數據包並從中獲取數據。你將不得不有兩個嗅探器,一個捕獲TCP和一個捕獲UDP,但是它有什麼關係。你甚至可以使用asyncore來幫助你提高效率。但是,你選擇了低級別。我希望您必須知道如何手動讀取數據包標題,即您將需要TCP&UDP規格和附加設備協議。然後使用結構模塊提取元數據和內容。但首先我建議你去看看OpenVPN如何操作。 – Dalen
爲結構使用新波士頓有一個很好的指導。如果struct版本不起作用,我會使用promisc模式。謝謝:-) –