所以我试图在python中创建一个隧道协议。我有tun接口设置,通过它路由所有流量。 但是现在如何在我的程序中获取重定向到tun接口的数据包来加密它们并将它们发送到服务器? 从我所看到的,它是socket.bind()或socket.setsockopt()函数。 这是我的界面设置
这就是我现在使用的代码:
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")
这直接从设备读取。那么有没有办法使用套接字库来单独读取数据包?
感谢。
操作系统:macOS Sierra
答案 0 :(得分:0)
我会将tun接口置于混杂模式,以便我可以侦听通过的每个数据包。
如何做到这一点的良好开端见以下SO帖子:
Python Sockets: Enabling Promiscuous Mode in Linux
其他选项是对网络接口的低级访问,或者用Python编写的虚拟网卡驱动程序。