LoginSignup
1
0

More than 1 year has passed since last update.

この記事誰得? 私しか得しないニッチな技術で記事投稿!

Wireless Hacks p.85 MACアドレスからメーカ一覧を作るmachine.plを手打ちしてエラー報告。未完。無線網(Wi-Fi)空中線(antenna)(23)

Last updated at Posted at 2019-03-03

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
ubuntu
$ 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

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は()じゃなくて{}なんだ。
修正。

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 ma.pl line 24, near "pirnt "\m""
Execution of ma.pl aborted due to compilation errors.

printがpirnt, nがmの2箇所の間違い。

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;
}
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 ->が消えた。

現在のソース

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 -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.

このエントリーをはてなブックマークに追加
http://b.hatena.ne.jp/guide/bbutton

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0