Scapyの入門

Scapyはパケットを作るための最高のアプリ。Pythonで実装と。はい。
まじでPython最強なんだけど。

どうやら、簡単にパケットを作れるらしいです。

>>> ping  = IP(dst='192.168.1.13')/ICMP()
>>> ping.show()
###[ IP ]###
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags= 
  frag= 0
  ttl= 64
  proto= icmp
  chksum= 0x0
  src= 172.16.247.139
  dst= ***.***.**.***
  options= ''
###[ ICMP ]###
     type= echo-request
     code= 0
     chksum= 0x0
     id= 0x0
     seq= 0x0
>>> send(ping)
.
Sent 1 packets.
>>> reply = sr1(ping)
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
>>> 

これを見る感じだと、
IP()/ICMP()っていう1つ1つがプロトコルで、オプション決めれる?みたいな?

send()とsr1()の違いが分からないんですが、大体同じと思います。

とおもって調べた所、 sendはただただ送るだけ。
sr1は送って答えも要求するという者でした。

root@bt:~$ scapy
Welcome to Scapy (2.0.1)
>>> send(IP(src=RandIP('78.0.0.0/16'), dst='192.168.1.13')/TCP(sport=RandShort(), dport=51487), loop=1, verbose=1)
.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

これが何をしているかというと、
IPプロトコルに 送信元は クラスAをランダムにして、 送信先を 192.168.1.13という場所にして、ずっと送り続けるという者です。←イメージ

TCPプロトコルの sportとdportがイマイチわからないので調べた所、

    • sport is short for --source-port
    • dport is short for --destination-port

ふむふむ、相手のポートをどれにするか、ってことだなぁ。
そもそも Randomが使えるって時点で少し悪意を感じますよねw
loop=1 って言うのがイマイチ分からないですが、直感的に言うと、loopし続けると思うので
loop= Trueでやってみたところ成功しました。
verboseも同様。
verboseってなんだ!てなって、調べた所、

loop: send the packets endlessly if not 0.
inter: time in seconds to wait between 2 packets
verbose: override the level of verbosity. Make the function totally silent
when 0

と書いてあって、読んでみても分からん。
誰か助けてください!!


入門なので、これぐらいがちょード良いかと思います。

###追加###

verbose: 冗長な、くどい とかいう意味なんですが、
コンピュータ的な意味合いでいうと『詳細に』っていう意味になるらしいです。
だから、verbose=1っていうのはメモリを多くしてるのかなって思いました。

広告を非表示にする