LoginSignup
14
14

More than 5 years have passed since last update.

Scapy入門②(Scapyを使ったICMP、HTTP(TCP)送信)

Last updated at Posted at 2017-08-26

Scapy入門(Scapyを使ったICMP、HTTP(TCP)送信)

はじめに

こんにちは。あかこうです。
前回に引き続き、今回はScapyを作ったパケット送信までをまとめたいと思います。

環境・Scapyの説明等

前回の記事をご覧ください。
今回もscapyを直接起動したインタラクティブシェル上で、一行ずつ実行することを前提としてます。

パケットの作成から送信まで

ICMP(PING)

# googleのサーバに向けたICMPパケットの作成
# IPパケットの上にICMPを積んでいるイメージ
packet = IP(dst='www.google.com')/ICMP()

# パケットの中身を表示
packet.show()

# パケットを送信
# & 返ってきたパケットの表示
sr1(packet)

TCP(HTTP)

コネクションから送信まで

'''TCPにおけるコネクションの流れ'''

'''基本パケットの作成'''
# IPパケットの作成
ip = IP(dst='www.google.com')

# TCP(HTTP)パケットの作成
# sport, seqは適当 
# dportは標準である80版ポート, flagは'S'
tcp = TCP(sport=50000,dport=80,flags='S',seq=100)


'''3ハンドシェイクの実装'''
# SYNパケットの作成
syn= ip/tcp
# SYNパケットの送信
# & SYN ACKの受取
syn_ack = sr1(syn)

'''HTTPリクエストの作成(ACKパケットの作成)'''
# ACKパケットの設定
tcp.seq += 1
tcp.ack = syn_ack.seq + 1
# ACKパケットのflagは'A'
tcp.flags = 'A'
# ACKパケット送信
ack = ip/tcp
send(ack)

# HTTP GETのパケットを乗っける
get = 'GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n' 
http = ip/tcp/get
# リクエスト送信
response = sr(http, multi=1, timeout=1)
tcp.seq += len(get)

# レスポンスの表示
response[0][1][1]["Raw"].load

コネクションを切る

'''コネクションを切る'''
# 上記のコードの続き

# FAフラグを持ったFINACKパケットの送信
tcp.flags = 'FA'
fin_ack = sr1(ip/tcp)
tcp.seq += 1

# 最後にACKを返す
tcp.ack = fin_ack.seq + 1
tcp.flags = 'A'
send(ip/tcp)
14
14
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
14
14