听虚拟接口

时间:2013-11-09 07:15:32

标签: c networking wireless packet-capture tun

我的目标是创建一个创建虚拟无线接口并在该接口上附加侦听器。我正在尝试使用C程序。

到目前为止,我已经能够通过以下方法创建虚拟接口:

  • 使用linux iw命令:`
  

sudo iw phy phy0 interface add mySta1 type station

但我无法找到使用C程序执行相同操作的库。

char tun_name[IFNAMSIZ];
strcpy(tun_name, "MyTun");
tunfd = tun_alloc(tun_name, IFF_TUN | IFF_NO_PI);

其中tun_alloc是我的函数,它使用ioctl创建接口

  

ioctl(fd,TUNSETIFF,(void *)& ifr)

但此界面没有无线扩展

用于收听界面:

  

nread = read(tunfd,buffer,sizeof(buffer));

但这仅适用于我使用我的程序或openvpn等程序创建的tun设备。当与wlan0等任何其他接口一起使用时,ioctl会给出错误“Invalid argument”

我对这个问题的处理方法是否正确?有没有其他方法来实现这一目标?我想知道以下内容:

  1. 有没有办法在由'iw add interface'命令创建的设备上附加tun设备?
  2. 有没有办法制作虚拟无线tun / tap接口或将现有tun接口的类型更改为无线?

2 个答案:

答案 0 :(得分:1)

如果你想在C程序中实现“iw phy ...” - 只需看看“iw”程序源。可能是由一些ioctls或netlink实现的。

您的问题的答案:

  1. 虚拟TUN / TAP设备表示此设备独立于任何硬件。它只是软件解决方案。您无法轻松地在用户空间中将TUN / TAP设备连接到无线接口。

  2. 不,正如我在回答1中所写.TUN / TAP只是虚拟设备,无法转换为wifi设备类型。

答案 1 :(得分:0)

我不知道任何现有的库。如果您的唯一目的是通过代码实现此功能,那么为什么不遵循这一点。

system("iw phy phy0 interface add mySta1 type station");

它显然是丑陋的,但它的目的。