OS X に scapy をインストールする
scapy があれば対話的に、または Python スクリプトから任意のパケットを生成すること (等) が出来ます。OS X への scapy インストール手順をメモしておきます。検証には OS X El Captian (10.11.4) を、インストールには homebrew を使いました (homebrew はインストールされている前提です)。
homebrew で scapy をインストールする
scapy のインストールは brew install homebrew/python/scapy を実行するだけです。依存関係も homebrew が解決してくれ、一緒に libdnet もインストールされます。
| brew install homebrew/python/scapy
|
現時点では 2.3.1 がインストールされました。これでインストールは完了です。
| $ brew info homebrew/python/scapy
homebrew/python/scapy: stable 2.3.1, HEAD
Powerful interactive packet manipulation program
http://www.secdev.org/projects/scapy/
/usr/local/Cellar/scapy/2.3.1 (238 files, 3.6M) *
Built from source on 2016-05-06 at 16:18:44
From: https://github.com/Homebrew/homebrew-python/blob/master/scapy.rb
==> Dependencies
Required: libdnet
|
scapy の対話的ツールも /usr/local/bin/scapy にインストールされました。
| $ file /usr/local/bin/scapy
/usr/local/bin/scapy: a /usr/bin/python script text executable
|
/usr/local/bin/scapy の中身は以下のような Python スクリプトになっています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | #!/usr/bin/python
#############################################################################
## ##
## scapy.py --- Interactive packet manipulation tool ##
## see http://www.secdev.org/projects/scapy/ ##
## for more informations ##
## ##
## Copyright (C) Philippe Biondi <phil@secdev.org> ##
## ##
## This program is free software; you can redistribute it and/or modify it ##
## under the terms of the GNU General Public License version 2 as ##
## published by the Free Software Foundation. ##
## ##
## This program is distributed in the hope that it will be useful, but ##
## WITHOUT ANY WARRANTY; without even the implied warranty of ##
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ##
## General Public License for more details. ##
## ##
#############################################################################
from scapy.main import interact
interact()
|
エラーの修正
しかし、このままでは scapy を実行すると scapy のライブラリが見つからず、エラーになってしまいます。
| $ scapy
Traceback (most recent call last):
File "send_icmp.py", line 1, in <module>
from scapy.all import send, IP, ICMP
ImportError: No module named scapy.all
|
これを解消するには以下のように実行します。
| mkdir -p $HOME/Library/Python/2.7/lib/python/site-packages
echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' \
>> $HOME/Library/Python/2.7/lib/python/site-packages/homebrew.pth
|
これで scapy を実行出来るようになりました。
Hello, Scapy!
scapy を使った Python スクリプトを作成し、テストしてみます。今回は下記の内容で HelloScapy.py というファイルを作成しました。
| #!/usr/bin/env python
from scapy.all import send, IP, ICMP
send(IP(src="172.16.10.100",dst="172.16.10.10")/ICMP()/"Hello, Scapy!")
|
早速、実行してみます。
| $ python HelloScapy.py
WARNING: No route found for IPv6 destination :: (no default route?)
.
Sent 1 packets.
|
1 パケット送信出来たようです。実際にパケットをキャプチャしてみると「Hello, Scapy!」というデータの入った ICMP echo request と reply のやり取りがキャプチャ出来ました。
| $ sudo tcpdump -i en3 -X icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en3, link-type EN10MB (Ethernet), capture size 262144 bytes
17:05:50.990761 IP 172.16.10.100 > 172.16.10.10: ICMP echo request, id 0, seq 0, length 21
0x0000: 4500 0029 0001 0000 4001 0e45 ac10 0a64 E..)....@..E...d
0x0010: ac10 0a0a 0800 bed3 0000 0000 4865 6c6c ............Hell
0x0020: 6f2c 2053 6361 7079 21 o,.Scapy!
17:05:50.992212 IP 172.16.10.10 > 172.16.10.100: ICMP echo reply, id 0, seq 0, length 21
0x0000: 4500 0029 0001 0000 ff01 4f44 ac10 0a0a E..)......OD....
0x0010: ac10 0a64 0000 c6d3 0000 0000 4865 6c6c ...d........Hell
0x0020: 6f2c 2053 6361 7079 21 o,.Scapy!
|
参考 URL