我正在尝试通过网络上的一些简单的 tun/tap 示例工作,但遇到了一些麻烦。简而言之,我正在尝试:
- 创建一个tun接口并给它一个地址
- 使用一些代码打开 tun 接口,打印接收到的数据包
- 用 netcat 发送一些数据包
- 使用wireshark和打印它们的代码观察数据包
我在(3)和(4)方面遇到了麻烦。本教程说,在较旧的 linux 版本中,您可以使用 ping,但显然情况不再如此,所以我正在尝试使用 netcat。我的假设是我没有正确发送数据 - 具体来说,使用 netcat 我必须针对特定端口,所以我给它一个任意端口以及 tun 接口的地址。
由于wireshark 和这两个程序都没有看到任何东西,我认为是数据包的发送不正确。有没有比使用 netcat 更好的方法?
tun接口:
$ ifconfig tun2
tun2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.7.1 P-t-P:192.168.7.2 Mask:255.255.255.255
UP POINTOPOINT NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
写入一些数据包,没有观察到错误
$ echo -n 'fooooo' | nc 192.168.7.1 5555
$
$ echo -n `cat index.html` | nc 192.168.7.1 5555
$
Wireshark(和程序控制台)什么都不显示:
$sudo tshark -i tun2
....
我已经为(2)尝试了两种不同的代码,它们都应该打印出接收到的数据包:
更新:
在上面的第二个链接中运行 simpletun 程序作为客户端和服务器,在同一台机器上,对于我得到的服务器:
$ ./simpletun -i tun2 -s -d
Successfully connected to interface tun2
对于客户端(我认为它将在另一台机器上运行):
$./simpletun -i tun2 -c 192.168.7.1 -d
ioctl(TUNSETIFF): Device or resource busy
Error connecting to tun/tap interface tun2!
所以我很确定我正在打开 tun2。
编辑2:
我在带有 ubuntu 服务器的 virtualbox VM 上执行此操作。一旦我让它在一台机器上工作,我想尝试用第二台机器编写一个简单的 UDP 桥,两者都在 tun 接口上。
编辑3:
环回它是
$ sudo tshark -i lo
[sudo] password for nflacco:
tshark: Lua: Error during loading:
[string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled
Running as user "root" and group "root". This could be dangerous.
Capturing on lo
0.000000 192.168.7.1 -> 192.168.7.1 TCP 74 59584 > personal-agent [SYN] Seq=0 Win=32792 Len=0 MSS=16396 SACK_PERM=1 TSval=26444728 TSecr=0 WS=4
0.000019 192.168.7.1 -> 192.168.7.1 TCP 54 personal-agent > 59584 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0