TLDR:我想阻止与 Raspberry Pi ad-hoc WiFi 网络上的对等点进行无线通信,但又不想将其关闭或禁用接口。这是为了模拟节点超出彼此的范围。
我有一个由三个运行临时网络(“PiFi”)的 Raspberry Pi 组成的无线网络。在每个 Pi 上,接口wlan0
都分配有一个静态 IP 地址10.0.0.x
,其中x
是 1、2 或 3。出于调试目的,Pi 连接到以太网交换机,以便我可以通过 SSH 控制它们。该有线网络使用192.168.2.*
,其地址由我的笔记本电脑的 DHCP 分配。我在每台设备上使用以下命令来启用网络。 (请注意,我还运行 BATMAN 来处理网状网络上的第 2 层路由,但我不认为这是相关的。)
启动时的命令:
iw wlan0 set type ibss
ip link set wlan0 up
iw wlan0 ibss join "PiFi" 2432
/etc/dhcpcd.conf
:
interface wlan0
static ip_address=10.0.0.x/24
我的问题是我需要测试每个节点如何无线的当网络以无线方式超出其他节点的范围时(我的软件有 TCP 连接,应该超时并定期重新尝试连接),网络就会执行。通过物理地将 Pi 移出彼此的范围来测试这一点很困难。不幸的是,以下事情对我不起作用:
- 禁用接口 (
ip link set wlan0 down
)。这不允许绑定到10.0.0.x
. - 关闭发射机 (
iwconfig wlan0 txpower off
)。同样的问题(无法绑定)。 - 关闭发射机的电源 (
iwconfig wlan0 txpower 1mW
)。设备仍然可以轻松地通过空中通信,因为它们彼此靠近。 - 在一个节点上切换 ESSID (
iw wlan0 ibss leave; iw wlan0 ibss join "FakeFi" 2432
)。这会产生奇怪的效果。有时它可以工作,但通常套接字的连接端偶尔(五分之一)绑定到192.168.2.*
. (强制连接一旦发生离开/加入,绑定的套接字就会10.0.0.x
失败)。EADDRNOTAVAIL
我需要一种方法来保持接口正常运行,以便我的套接字绑定到正确的地址,但以某种方式禁用实际的无线通信。理论上,这可以通过禁用物理天线或将发射功率设置为 0 来完成,但我还没有找到方法来做到这一点。我对任何解决方案持开放态度。