python解析ネイティブへのパケット例(解析パケット)
15645 ワード
tcp.py
udp.py
1 # -*- coding: cp936 -*-
2 import socket
3 from struct import *
4 from time import ctime,sleep
5 from os import system
6 system('title tcp sniffer')
7 system('color 05')
8 # the public network interface
9 HOST = socket.gethostbyname(socket.gethostname())
10 # create a raw socket and bind it to the public interface
11 s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
12 s.bind((HOST, 0))
13 # Include IP headers
14 s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
15 # receive all packages
16 #s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
17 # receive a package
18 while 1==1:
19 packet = s.recvfrom(65565)
20 packet = packet[0]
21 ip_header = packet[0:20]
22 iph = unpack('!BBHHHBBH4s4s',ip_header)
23 version = iph[0] >> 4 #Version
24 ihl = iph[0] * 0xF #IHL
25 iph_length = ihl * 4 #Total Length
26 ttl = iph[5]
27 protocol = iph[6]
28 s_addr = socket.inet_ntoa(iph[8])
29 d_addr = socket.inet_ntoa(iph[9])
30 print ctime()
31 print 'Version : ' + str(version) + ' IHL : ' + str(ihl) + ' Total Length: '+str(iph_length) + ' TTL : ' +str(ttl) + ' Protocol : ' + str(protocol) + ' Source Address : ' + str(s_addr) + ' Destination Address : ' + str(d_addr)
32 if protocol == 6:
33 tcp_header = packet[20:40]
34 tcph = unpack('!HHLLBBHHH' , tcp_header)
35 source_port = tcph[0]
36 dest_port = tcph[1]
37 sequence = tcph[2]
38 acknowledgement = tcph[3]
39 doff_reserved = tcph[4]
40 tcph_length = doff_reserved >> 4
41 print 'Source Port : ' + str(source_port) + ' Dest Port : ' + str(dest_port) + ' Sequence Number : ' + str(sequence) + ' Acknowledgement : ' + str(acknowledgement) + ' TCP header length : ' + str(tcph_length)
42 data = packet[40:len(packet)]
43 print 'Data : ' + data
44
45 # disabled promiscuous mode
46 s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
udp.py
1 # -*- coding: cp936 -*-
2 import socket
3 from struct import *
4 from time import ctime,sleep
5 from os import system
6 system('title udp sniffer')
7 system('color 05')
8 # the public network interface
9 HOST = socket.gethostbyname(socket.gethostname())
10 # create a raw socket and bind it to the public interface
11 s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
12 s.bind((HOST, 0))
13 # Include IP headers
14 s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
15 # receive all packages
16 #s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
17 # receive a package
18 while 1==1:
19 packet = s.recvfrom(65565)
20 packet = packet[0]
21 ip_header = packet[0:20]
22 iph = unpack('!BBHHHBBH4s4s',ip_header)
23 version = iph[0] >> 4 #Version
24 ihl = iph[0] * 0xF #IHL
25 iph_length = ihl * 4 #Total Length
26 ttl = iph[5]
27 protocol = iph[6]
28 s_addr = socket.inet_ntoa(iph[8])
29 d_addr = socket.inet_ntoa(iph[9])
30 if protocol == 17:
31 udp_header = packet[20:28]
32 udph = unpack('!HHHH' , udp_header)
33 source_port = udph[0]
34 dest_port = udph[1]
35 length = udph[2]
36 checksum = udph[3]
37 data = packet[28:len(packet)]
38
39 print ctime()
40 print 'Version : ' + str(version) + ' IHL : ' + str(ihl) + ' Total Length: '+str(iph_length) + ' TTL : ' +str(ttl) + ' Protocol : ' + str(protocol) + ' Source Address : ' + str(s_addr) + ' Destination Address : ' + str(d_addr)
41 print 'Source Port : ' + str(source_port) + ' Dest Port : ' + str(dest_port) + ' Length : ' + str(length) + ' Checksum : ' + str(checksum)
42 print 'Data : ' + data
43 # disabled promiscuous mode
44 s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)