アクセスポイントとして動作するAngstrom Linuxデバイスがありhostapd
ますdhcpd
。 Wi-Fiに接続されているデバイスのリストを取得できますか? DHCPリースを取得できることを知っていますが、どのデバイスがそれを通過するかを知る必要がありますwlan0
(iwlist
オプションを含む)。
iwlist wlan0 ap
iwlist wlan0 accesspoints
iwlist wlan0 peers
しかし、すべてが返されます。
wlan0 Interface doesn't have a list of Peers/Access-Points
iwconfig
、にも表示されますが、クライアントiwgetid
のリストを表示するオプションはないようです。iwpriv
iwspy
/sbin
答え1
使用する必要がありますiw dev wlan0 station dump
rootユーザーとして
答え2
「arp」をrootとして使用できます。
$ sudo arp
または:
$ sudo arp | sort
ちょっといいですが、ポイントを知っています:)
答え3
次のコマンドを使用して、APに接続されているデバイスのリストを見つけることもできます。
cat /var/lib/misc/dnsmasq.leases
dnsmasq.leasesファイルには、これまでAPに接続されているすべてのデバイスが一覧表示されます。次のコマンドを使用して、WiFiまたはイーサネット経由でデバイスに接続されているすべてのデバイスのリストを取得することもできます。
sudo arp
答え4
私は次のようなクイックソリューションを使用します。
awk '$4~/[1-9a-f]+/&&$6~/^wl/{print "ip: "$1" mac: "$4}' /proc/net/arp
フィルタはリストから/[1-9a-f]/
MACアドレスを削除します。00:00:00...
この/^wl/
フィルタは、ワイヤレス以外のインターフェイス(最初に「wl」がない名前)をすべて削除します。
例の結果は次のとおりです。
ip: 192.168.0.1 mac: 64:6e:ea:d1:d3:0a
ip: 192.168.0.2 mac: a0:d3:a1:6d:d0:4a
macs
また、便宜上、このコンテキストのMACアドレスのリストを含むファイルを使用しました。
90:94:97:9f:85:10 My Huawei
64:6e:ea:d1:d3:0a Rostelecom Router
このファイルを解析して接続されたデバイスのリストを取得するには、次のコマンドを使用します(END部分は必要ありません。これはアップデートプログラムです)。
awk 'BEGIN{while((getline<"macs")>0){nmm=$0;gsub($1" ","",nmm);nmz[$1]=nmm}}$4~/[1-9a-f]+/&&$6~/^wl/{print $1 " " (nmz[$4]?nmz[$4]:$4);if(!nmz[$4]){nmz[$4]=$4;update=1}}END{if(update){system("gawk -f macupd.awk")}}' /proc/net/arp
結果は次のとおりです。
192.168.0.1 Rostelecom Router
192.168.0.74 My Huawei
これはmacupd.awk
ファイルを更新するために使用されるスクリプトですmacs
。ファイルからベンダー名を取得します。oui.txt(同じディレクトリにあります)これをコンピュータに接続されている未知のホスト/クライアントの説明として使用し、macs
リストファイルに書き込みます(コマンドからEND部分を削除してこの機能を無効にすることができます)。スクリプトは次のとおりです。
#!/usr/bin/gawk -f
BEGIN{
while((getline<"macs")>0){
str++
if($0!~"(^#|^$)"){
nam=$0
gsub($1" ","",nam)
macnamz[$1]=nam
}
}
while((getline<"/proc/net/arp")>0){
if($4~/[1-9a-f]+/&&$6~/^wl/){
if(!macnamz[$4]){
mac=macv=$4
gsub(":","",macv)
vendor=substr(macv,1,6)
rs=RS
RS="\n|\r"
while((getline<"oui.txt")>0){
if(toupper($1)~toupper(vendor)){gsub(/.*\t+/,"");macnamz[mac]=$0;update=1}
}
RS=rs
}
}
}
if(update){
for(i in macnamz){print i " " macnamz[i] > "macs"}
print "" > "macs"
}
}
もしそうなら、最初不完全なコマンドを実行すると、結果は次のようになります(すべてのホストがわからない場合)。
192.168.10.1 00:d0:ef:aa:ee:ff
192.168.10.2 f4:bd:9e:00:00:00
192.168.10.3 00:22:72:11:22:33
これ第二タスクは次のとおりです。
192.168.10.1 IGT
192.168.10.2 Cisco Systems, Inc
192.168.10.3 American Micro-Fuel Device Corp.
私のスクリプトの説明です。
getline<"macs"
- リストから行を読む
if($0!~"(^#|^$)")
- コメント行と空白行を無視します。
gsub($1" ","",nam)
- 説明のために変数を使用しますnam
(スペースの後ろのすべての内容)。
macnamz[$1]=nam
- 最後に、行を連想配列の一部に変換します(2つの冗長MACを持つことはできません。2番目のMACは最初のMACを上書きします)。
getline<"/proc/net/arp"
- 接続のIPとMACを取得します。
if($4~/[1-9a-f]+/&&$6~/^wl/)
- ヘッダライン、MAC ゼロ、および非無線インターフェイスをフィルタリングします。
if(!macnamz[$4])
- 接続機器がmacs
当社ファイルに登録されていない場合。
gsub(":","",macv)
vendor=substr(macv,1,6)
-MACの最初の6つのシンボルを取得します。
RS="\n|\r"
- oui.txt
MS Windowsの行末がある可能性があるためです。
gsub(/.*\t+/,"")
- タグを削除
macnamz[mac]=$0
- 行を配列メンバーに変換します。
update=1
- この変数は、ファイルを更新する必要があることを示します(必要な場合)。