擅长:python、mysql、java
<p>OSX tun/tap驱动程序似乎有点不同。Linux示例动态地分配tun接口,这在OSX中不起作用,至少不是以相同的方式。</p>
<p>我剥离了代码,创建了一个基本示例,说明如何在OSX上使用自选tun设备使用tun,并将每个数据包打印到控制台。我添加了<a href="http://www.secdev.org/projects/scapy/doc/" rel="noreferrer">Scapy</a>作为漂亮打印的依赖项,但是如果需要,可以用原始数据包转储替换它:</p>
<pre><code>import os, sys
from select import select
from scapy.all import IP
f = os.open("/dev/tun12", os.O_RDWR)
try:
while 1:
r = select([f],[],[])[0][0]
if r == f:
packet = os.read(f, 4000)
# print len(packet), packet
ip = IP(packet)
ip.show()
except KeyboardInterrupt:
print "Stopped by user."
</code></pre>
<p>必须以根用户身份运行此命令,或者执行<code>sudo chown your_username /dev/tun12</code>以允许打开设备。</p>
<p>要将其配置为点到点接口,请键入:</p>
<pre><code>$ sudo ifconfig tun12 10.12.0.2 10.12.0.1
</code></pre>
<p>请注意,<code>tun12</code>接口仅在<code>/dev/tun12</code>打开时(即程序运行时)可用。如果中断程序,tun接口将消失,下次运行程序时需要重新配置。</p>
<p>如果您现在ping端点,您的数据包将打印到控制台:</p>
<pre><code>$ ping 10.12.0.1
</code></pre>
<p>Ping本身将打印请求超时,因为没有响应Ping请求的隧道终结点。</p>