2

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

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

  • 使用 linux iw 命令:`

sudo iw phy phy0 接口添加 mySta1 类型站

但我无法找到使用 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 = 读取(tunfd,缓冲区,sizeof(缓冲区));

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

我解决问题的方法正确吗?有没有其他方法可以实现这一目标?我想知道以下内容:

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

2 回答 2

1

如果您想在 C 程序中实现“iw phy...” - 只需查看“iw”程序源。可能是通过一些ioctl或netlink实现的。

回答您的问题:

  1. 虚拟 TUN/TAP 设备意味着该设备独立于任何硬件。它只是软件解决方案。您不能轻易地在用户空间中将 TUN/TAP 设备连接到无线接口。

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

于 2013-11-09T09:25:23.240 回答
0

我不知道任何现有的图书馆。如果您的唯一目的是从您的代码中获得此功能,那么您为什么不遵循这个。

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

它显然很丑陋,但它达到了它的目的。

于 2013-11-09T07:28:27.243 回答