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

时间:2012-12-03 03:57:54

标签: c networking driver tunnel

我正在努力研究网络上的一些简单的tun / tap示例,并且遇到了一些麻烦。简而言之,我想:

  1. 创建一个tun接口并为其指定一个地址
  2. 使用一些将打印出已接收数据包的代码打开tun接口
  3. 使用netcat发送一些数据包
  4. 使用wireshark和打印出来的代码观察数据包
  5. 我遇到了(3)和(4)的问题。 This tutorial说在较旧的Linux版本中你可以使用ping,但显然情况不再如此,所以我试图使用netcat。我的假设是我没有正确地发送数据 - 具体来说,netcat我必须瞄准一个特定的端口,所以我给它一个任意的端口以及tun接口的地址。

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

    the tun inferface:

    $ 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。

    EDIT2:

    我在虚拟机VM上使用ubuntu服务器执行此操作。一旦我在一台机器上运行它,我想尝试用第二台机器编写一个简单的UDP桥,两者都在tun接口上。

    EDIT3:

    环回

    $ 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
    

2 个答案:

答案 0 :(得分:1)

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

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

e.g。如果您使用它进行虚拟化,请确保虚拟机已启动并且正在运行。准备接收数据包。如果您将此用于VPN或其他东西,请确保远程系统正在响应。

我使用了隧道接口进行虚拟化。 &安培;当VM启动时,它可以工作。运行

答案 1 :(得分:0)

尝试

echo -n 'fooooo' | nc 192.168.7.2 5555

您需要将流量发送到tun接口子网中的IP,而不是接口IP本身。如果将其发送到接口IP,则内核将不会通过网络将其发送,因为数据包已到达其目的地。