使用python从网络接口读取和处理数据包

时间:2017-10-08 21:24:37

标签: python networking macos-sierra tunnel network-interface

所以我试图在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

1 个答案:

答案 0 :(得分:0)

我会将tun接口置于混杂模式,以便我可以侦听通过的每个数据包。

如何做到这一点的良好开端见以下SO帖子:

Python Sockets: Enabling Promiscuous Mode in Linux

其他选项是对网络接口的低级访问,或者用Python编写的虚拟网卡驱动程序。