捕获通过 netcat 发送的 tun 接口(interface)上的数据包

标签 c networking driver tunnel

我正在尝试解决网络上的一些简单的 tun/tap 示例,但遇到了一些麻烦。简而言之,我正在尝试:

  1. 创建一个tun接口(interface)并给它一个地址
  2. 使用一些代码打开 tun 接口(interface),打印出收到的数据包
  3. 使用 netcat 发送一些数据包
  4. 使用wireshark和打印它们的代码观察数据包

我在 (3) 和 (4) 方面遇到问题。 This tutorial说在旧的 Linux 版本中你可以使用 ping,但显然情况不再是这样了,所以我尝试使用 netcat。我的假设是我没有正确发送数据 - 具体来说,使用 netcat 我必须瞄准特定端口,因此我给它一个任意端口以及 tun 接口(interface)的地址。

由于wireshark和两个程序都看不到任何东西,我认为是数据包的发送不正确。有没有比使用 netcat 更好的方法?

tun接口(interface):

$ 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 虚拟机上执行此操作。一旦我让它在一台机器上工作,我想尝试用第二台机器编写一个简单的 UDP 桥接器,两者都在 tun 接口(interface)上。

编辑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

最佳答案

隧道 tun2 的另一端是否连接有另一个系统?

注意 ifconfig 输出中的 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)。确实没有数据包通过该接口(interface)传输。确保该接口(interface)上有一些接收器。

例如如果您将其用于虚拟化,请确保虚拟机已启动并准备好接收数据包。如果您将其用于 VPN 或其他用途,请确保远程系统正在响应。

我使用隧道接口(interface)进行虚拟化。当虚拟机启动并运行时,它就可以工作。

关于捕获通过 netcat 发送的 tun 接口(interface)上的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13676928/

相关文章:

networking - 跨子网的UDP广播数据包

c++ - Windows 打印处理器可以强制假脱机数据类型吗

mongodb - 如何使用struct使用mongo-go-driver的更新功能

c++ - 如何从 lua_topointer 访问 lua 的对象?

c - 过程 : Regarding proc Executable size difference

c - 确定使用哪种 sockaddr 变体的正确方法是什么?

java - 从位于网络服务器上运行 java 程序。

c# - 获取公共(public)/外部 IP 地址?

Android Binder 内部

通过附加两个 int 的二进制表示来创建 double