Se a sua interface estiver no modo IBSS, Mesh point ou AP / P2P Group Owner, você poderá descarregar o MAC das estações e seu nível de sinal conforme a sua placa de rede com iw dev wlan0 station dump
.
Quanto à busca do MAC a partir do endereço IP, uma sugestão seria usar a tabela ARP com ip neigh
. Observe que você pode ter que fazer ping no endereço IP para preencher a tabela ARP.
Então, para buscar o RSSI de um nó que reivindica o endereço A, pode ser:
MAC="$(ip neigh show to A dev wlan0 | cut -f 3 -d ' ')"
if [ -n "$MAC" ]; then
iw dev wlan0 station get "$MAC" | sed -nre "s@\s*signal:\s*@@p"
else
# no ARP entry. Ping the address and retry.
fi
Se, no entanto, sua interface não for deste tipo (por exemplo, Non-AP sta), então você terá que mexer no modo de monitor, e você não tem uma maneira confiável de obter um endereço MAC de um endereço IP (dica: se a estação estiver roteando, então usará o IP do remetente, não o seu próprio).
Como dito antes, iwconfig/iwspy/iwlist/iwpriv
está obsoleto e é uma droga. eles usam uma API do kernel (extensões sem fio) que está obsoleta e é implementada apenas para propósitos de retrocompatibilidade, e somente se ativada na configuração do kernel. Muitas partes dele são falsificadas ou não possuem muitos recursos, incluindo o Wi-Fi Direct. Se você está usando o Wi-Fi direct, então você já está usando a moderna API do kernel nl80211, e você deve esquecer a API wext e iwconfig/iwspy
.
E sim, você precisa do endereço MAC do nó. O Wi-Fi opera na camada 1 e 2 no modelo OSI e não se preocupa com a camada superior. Um IP e um endereço MAC servem a um propósito diferente e não são a mesma coisa.