Wireless Hacks
――ワイヤレスネットワーク完全活用テクニック100選
https://www.oreilly.co.jp/books/4873111838/
p.85 にarpコマンドでMACアドレスを確かめて製造者の一覧を作るperlスクリプトのソースコードを示している。
perl手打ち10年ぶりくらい。
curlは既成の式を打つだけ(今回も)。
勉強のため、打ち間違い、エラーを含めて記録。
docker ubuntuで実施。Wireless系の設定は後日検討。
docker
$ docker run -p 8888:8888 -p 6006:6006 -p 8000:8000 -it ubuntu /bin/bash
$ apt update
$ apt install -y perl vim sudo apt-utils procps
あるいはすでに、最後まで試したソフト、ファイルが入ったものは
$ docker run -p 8888:8888 -p 6006:6006 -p 8000:8000 -it kaizenjapan/wireless_hacks /bin/bash
docker内で
# cd /tmp/wireless_hacks
# ls
# perl machine.pl
#machine.pl
#!/usr/bin/perl
my %cards;
my %ips;
open (ARP,"arp -an|") || die "Couldn't open arp table: $!\n";
print "Looking up OUIs.";
while(<ARP>){
chomp;
my $addr = $_;
my $ip = $_;
$addr =~ s/.* ([\d\w]+:[\d\w]+:[\d\w]+):.+/$1/;
$addr =~ s/\b([\d\w])\b/0$1/g;
$addr =~ s/:/-/g;
next unless $addr =~ /..-..-../;
$ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).+/$1/;
print ".";
$cards(addr)||=`curl -ds 'x=$adddr' http;//standards.ieee.org/cgi-bin/ouisearch`;
($cards(addr) =~ /Sorry!/) && ($cards{$addr} = "Unknown OUI; $addr");
$ips($ip) = $addr;
}
pirnt "\m";
for(keys(%ips)){
$cards($ips{$_} =~ s/.*.hex.\s+([\w\s\,\.]+)\n.*/$1/s;
print "$_ -> $cards{$ips{$_}}\n";
}
$ perl machine.pl
String found where operator expected at machine.pl line 24, near "pirnt "\m""
(Do you need to predeclare pirnt?)
syntax error at machine.pl line 20, near "$cards("
syntax error at machine.pl line 21, near "$cards("
syntax error at machine.pl line 22, near "$ips("
syntax error at machine.pl line 26, near "$cards("
syntax error at machine.pl line 28, near "}"
Execution of machine.pl aborted due to compilation errors.
$cardは()じゃなくて{}なんだ。
修正。
#!/usr/bin/perl
my %cards;
my %ips;
open (ARP,"arp -an|") || die "Couldn't open arp table: $!\n";
print "Looking up OUIs.";
while(<ARP>){
chomp;
my $addr = $_;
my $ip = $_;
$addr =~ s/.* ([\d\w]+:[\d\w]+:[\d\w]+):.+/$1/;
$addr =~ s/\b([\d\w])\b/0$1/g;
$addr =~ s/:/-/g;
next unless $addr =~ /..-..-../;
$ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).+/$1/;
print ".";
$cards{addr}||=`curl -ds 'x=$adddr' http;//standards.ieee.org/cgi-bin/ouisearch`;
($cards{addr} =~ /Sorry!/) && ($cards{$addr} = "Unknown OUI; $addr");
$ips{$ip} = $addr;
}
pirnt "\m";
for(keys(%ips)){
$cards{$ips{$_}} =~ s/.*.hex.\s+([\w\s\,\.]+)\n.*/$1/s;
print "$_ -> $cards{$ips{$_}}\n";
}
$ perl machine.pl
String found where operator expected at machine.pl line 24, near "pirnt "\m""
(Do you need to predeclare pirnt?)
syntax error at ma.pl line 24, near "pirnt "\m""
Execution of ma.pl aborted due to compilation errors.
printがpirnt, nがmの2箇所の間違い。
#!/usr/bin/perl
my %cards;
my %ips;
open (ARP,"arp -an|") || die "Couldn't open arp table: $!\n";
print "Looking up OUIs.";
while(<ARP>){
chomp;
my $addr = $_;
my $ip = $_;
$addr =~ s/.* ([\d\w]+:[\d\w]+:[\d\w]+):.+/$1/;
$addr =~ s/\b([\d\w])\b/0$1/g;
$addr =~ s/:/-/g;
next unless $addr =~ /..-..-../;
$ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).+/$1/;
print ".";
$cards{addr}||=`curl -ds 'x=$adddr' http;//standards.ieee.org/cgi-bin/ouisearch`;
($cards{addr} =~ /Sorry!/) && ($cards{$addr} = "Unknown OUI; $addr");
$ips{$ip} = $addr;
}
print "\n";
for(keys(%ips)){
$cards{$ips{$_}} =~ s/.*.hex.\s+([\w\s\,\.]+)\n.*/$1/s;
print "$_ -> $cards{$ips{$_}}\n";
}
$ perl machine.pl
Couldn't open arp table: No such file or directory
arpコマンドを打ってみる。
# arp
bash: arp: command not found`
# apt install arp
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package arp
dockerの素のubuntuにはarpは入っていないらしい。arpを導入するには何を指定するか「apt arp」検索。
net-tools は使われなくなり iproute2 が標準的になるかも
https://qiita.com/miyu/items/0cac69b6810dbbc56a9b
$ apt install -y net-tools curl
$ perl machine.pl
Looking up OUIs.. % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: x=
curl: (6) Could not resolve host: http
sh: 1: //standards.ieee.org/cgi-bin/ouisearch: not found
172.17.0.1 ->
URLの:が;になってた。
$ perl machine.pl
Looking up OUIs.. % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: x=
100 1 0 0 0 1 0 0 --:--:-- 0:00:02 --:--:-- 0
172.17.0.1 ->
'x=$adddr'
ってdが一つ多い。
'x=$addr'に変更。
$ perl machine.pl
Looking up OUIs.. % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: x=02-42-f1
100 1 0 0 0 1 0 0 --:--:-- 0:00:01 --:--:-- 2
172.17.0.1 ->
2箇所 addrで$がぬけてた。
$ perl machine.pl
Looking up OUIs.. % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: x=02-42-f1
100 1 0 0 0 1 0 0 --:--:-- 0:00:01 --:--:-- 2
172.17.0.1 ->
何が駄目か。
die:
https://www.javadrive.jp/perlfunc/control/index2.html
$addr =~ s/.* ([\d\w]+:[\d\w]+:[\d\w]+):.+/$1/;
$ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).+/$1/;
の最後の+が*
$addr =~ s/.* ([\d\w]+:[\d\w]+:[\d\w]+):.*/$1/;
$ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).*/$1/;
それでも同じエラーのまま。
curl -ds
じゃなくて
curl -sd
だった。
$ arp -an
? (172.17.0.1) at 02:42:f1:b9:a8:72 [ether] on eth0
$ perl machine.pl
Looking up OUIs..
172.17.0.1 ->
なして?
docker起動時にport設定していないことを思い出す。
-p 8888:8888 -p 6006:6006 -p 8000:8000
をつけてdocker起動。
# perl machine.pl
Looking up OUIs.
え、172.17.0.1 ->が消えた。
現在のソース
#!/usr/bin/perl
my %cards;
my %ips;
open (ARP,"arp -an|") || die "Couldn't open arp table: $!\n";
print "Looking up OUIs.";
while(<ARP>){
chomp;
my $addr = $_;
my $ip = $_;
$addr =~ s/.* ([\d\w]+:[\d\w]+:[\d\w]+):.*/$1/;
$addr =~ s/\b([\d\w])\b/0$1/g;
$addr =~ s/:/-/g;
next unless $addr =~ /..-..-../;
$ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).*/$1/;
print ".";
$cards{$addr}||=`curl -sd 'x=$addr' http://standards.ieee.org/cgi-bin/ouisearch`;
($cards{$addr} =~ /Sorry!/) && ($cards{$addr} = "Unknown OUI: $addr");
$ips{$ip} = $addr;
}
print "\n";
for(keys(%ips)){
$cards{$ips{$_}} =~ s/.*.hex.\s+([\w\s\,\.]+)\n.*/$1/s;
print "$_ -> $cards{$ips{$_}}\n";
}
27.MACアドレスでカードのメーカーを特定する
(Hack 27 Finding Radio Manufacturers by MAC Address)https://vistech.net/~champ/online-docs/books/Wireless/0596005598_wirelesshks-chp-3-sect-9.html
にソースコードがあった。差分をとってみたら、空白の数の違い以外は、注釈中の記号の違いで文法上の問題はなかった。動作結果は同じ。
# diff machine.pl ../machine.pl
...
20,21c29,30
< $cards{$addr}||=`curl -sd 'x=$addr' http://standards.ieee.org/cgi-bin/[RETURN]ouisearch`;
< ($cards{$addr} =~ /Sorry!/) && ($cards{$addr} = "Unknown OUI: $addr");
---
> $cards{$addr}||=`curl -sd 'x=$addr' http://standards.ieee.org/cgi-bin/ouisearch`;
> ($cards{$addr} =~ /Sorry!/) && ($cards{$addr} = "Unknown OUI; $addr");
docker登録
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b4539edaf2a ubuntu "/bin/bash" 33 hours ago Up 33 hours quizzical_boyd
$ docker commit 7b4539edaf2a kaizenjapan/wireless_hacks
$ docker push kaizenjapan/wireless_hacks
#参考資料(reference)
##自己参考資料(self reference)
Wifi(無線網) Antenna(空中線)(3)でresearchgateで文献調査
https://qiita.com/kaizen_nagoya/items/2cff082e2ef214f2b377
Wifi(無線網) Antenna(空中線)(4) researchgateで文献調査 の参考文献一覧
https://qiita.com/kaizen_nagoya/items/e7474ca67842565334b1
無線網(Wifi)空中線(antenna)(5) 設置(install)設計(design)
https://qiita.com/kaizen_nagoya/items/d71eece182768e97039a
Wifi(無線網) Antenna(空中線)(6) 空中線(antenna)の特性
https://qiita.com/kaizen_nagoya/items/4cd18795fbb5eb79896c
無線網(Wifi)空中線(antenna) (7) 障害物と反射物
https://qiita.com/kaizen_nagoya/items/e1a8123094c1d1d836a9
無線網(Wifi)と空中線(antenna)(8) 仰角(elevation) 方位(azimuth)
https://qiita.com/kaizen_nagoya/items/3553ed48e1b03c7340a3
無線網(Wifi)と空中線(antenna)(9) Wifiと5Gの構成
https://qiita.com/kaizen_nagoya/items/25b0b571ca883f4fb733
無線網(Wifi)と空中線(antenna)(10) Wifiとアンテナの特許を調べてみた
https://qiita.com/kaizen_nagoya/items/c4a1475025005bdd2a33
無線網(Wifi)空中線(antenna)(21) 「Wireless Hacks」 Rob Flickengerをハックしたい
https://qiita.com/kaizen_nagoya/items/df87e75fe9a931fff472
無線網(Wifi)空中線(antenna)(22) 「「Wireless Hacks」第二版(英語)Rob Flickenger, Roger Weeksをハックしたい
https://qiita.com/kaizen_nagoya/items/c4918d368e4a1b5034d1
無線網(Wifi)空中線(antenna)(23) 「Wireless Hacks」 p.85 MACアドレスからメーカ一覧を作るmachine.plを手打ちしてエラー報告。未完。
https://qiita.com/kaizen_nagoya/items/26841520b9b9f9c61034
無線網(Wifi)空中線(antenna)(24) Wireless Hacks 資料まとめ方
https://qiita.com/kaizen_nagoya/items/043cea5137597536522f
無線網(Wifi)空中線(antenna)(25)Wireless Hacks 2019/2020(仮題)を書くために三百日のうちの第一日
https://qiita.com/kaizen_nagoya/items/b0a17f4c03fddbb795ab
無線網(Wifi)空中線(antenna)(26) 検索論文拝読
https://qiita.com/kaizen_nagoya/items/d6db5de2628a8ebfed94
無線網(Wifi)空中線(antenna)(27) 802.11 Wireless LAN Fundamentals を拝読
https://qiita.com/kaizen_nagoya/items/1ff8e127b52902d34cfd
無線網(Wifi)空中線(antenna)(28) 無料無線網(wifi)利用で便利なこと、不便なこと
https://qiita.com/kaizen_nagoya/items/9244aa0906cbedec83aa
無線網(Wifi)空中線(antenna)(29) WiFi Related document
https://qiita.com/kaizen_nagoya/items/c484c9f21b9d6fc5481e
無線網(Wifi)空中線(antenna)(30)Wifiの課題
https://qiita.com/kaizen_nagoya/items/b95d438fe0782a4d25bd
無線網(Wifi)空中線(antenna)(31)無線地域網(WLAN)設計・導入・運用・保守に必要な技能と情報
https://qiita.com/kaizen_nagoya/items/d0f37f6f517fa28b5d02
無線網(Wifi)空中線(antenna)(32)IEEE 802.11 Wifi C++
https://qiita.com/kaizen_nagoya/items/a9b97d6031fec6c04ae6
無線網(Wifi)空中線(antenna)(41) 災害時のwifi-bluetooth網の構築
https://qiita.com/kaizen_nagoya/items/2d82637301650c202715
無線網(Wifi)空中線(antenna)(42) 災害時のWifiおよびbluetooth系の安全分析<予定>
https://qiita.com/kaizen_nagoya/items/c8c679beae7082df47bf
文書履歴(document history)
ver. 0.01 初稿 20190303 午後8時
ver. 0.02 ()と{}の違い 20190303 午後8時10
ver. 0.03 print等綴り間違い 20190303 午後8時20分
ver. 0.04 arpコマンド未導入 20190303 午後8時30分
ver. 0.05 URLの:が;になってた。20190303 午後8時40分
ver. 0.06 変数addrのdが一つ多かった。 20190303 午後8時50分
ver. 0.07 変数addrの$が抜けてた。2箇所 20190303 午後9時
ver. 0.08 演算子の*が+になってた。2箇所 20190303 午後9時10分
ver. 0.09 curl -dsじゃなくて curl -sd 20190303 午後9時20分
ver. 0.10 参考資料追記 20190303 午後9時50分
ver. 0.11 現在のソース追記 20190303 午後10時
ver. 0.12 docker利用追記 20190304 午前8時
ver. 0.13 docker hub登録 20190304 午前9時
ver. 0.14 docker run -p 8888:8888 -p 6006:6006 -p 8000:8000 とポート追記 20190304 午前11時
ver. 0.15 ネット上のソースとdiff 20190305
ver. 0.16 表題統一・参考文献追記 20190312
ver. 0.17 URL追記 20230214
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.