#!/usr/bin/env python
#-- ----------------------------------------------- --- ------------------------
# 名前: raw_http.py
# 目的: raw http get パケットを構築する
#
# 著者: Yangjun
#
# 作成日: 08/02/2014
# 著作権: (c) Yangjun 2014
# ライセンス: <あなたのライセンス>
# ------------------------------------------------ -- ------------------------
import sys
import ソケット
from impacket import ImpactDecoder、ImpactPacket
def main():
if len(sys.argv) < 3:
print "使用: %s
% sys .argv[0]
print "使用: %s " % sys.argv[0]
sys.exit(1)
elif len (sys.argv) == 3:
src = sys.argv[1]
dst = sys.argv[2]
cnt = 1
elif len(sys.argv) == 4 :
src = sys.argv[1]
dst = sys.argv[2]
cnt = sys.argv[3]
else:
print "入力エラー!"
sys.exit(1)
#print src, dst
ip = ImpactPacket.IP()
ip.set_ip_src(src)
ip.set_ip_dst(dst)
# ECHO タイプの新しい ICMP パケットを作成します。
icmp = ImpactPacket.ICMP()
tcp = ImpactPacket.TCP()
tcp.set_th_sport(55968)
tcp.set_th_dport(80)
tcp.set_th_seq(1)
tcp.set_th_ack(1)
tcp.set_th_flags(0x18)
tcp.set_th_win(64)
tcp.contains( ImpactPacket.Data("GET / att/DIYLife/41264/528 HTTP/1.1rnHost: 192.168.111.1rnAccept-Encoding:identityrnrn"))
ip.contains(tcp)
# raw ソケットを開きます。特別なアクセス許可は次のとおりです。通常は必須です。
s =ソケット.socket(socket.AF_INET,ソケット.SOCK_RAW,socket.IPPROTO_TCP)
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
seq_id = 0
while cnt >= 1:
# チェックサムを計算します。
seq_id = seq_id + 1
tcp.set_th_seq(seq_id)
tcp.calculate_checksum()
# に送信します。ターゲットホスト。
s.sendto(ip.get_packet(), (dst,80))
cnt= cnt -1
if __name__ == '__main__':
main ()
実行後のパケット キャプチャは次のようになります: