Bonjour ,
Je viens partager avec vous un nouvel exercice auquel j'ai du répondre.
Voici l’énoncé:
# Create a packet sniffer using raw sockets which can parse TCP packets
# - parse individual fields
# - parse individual fields
Voici le script du packet sniffer
Code:
#!/usr/bin/python # Create a packet sniffer using raw sockets which can parse TCP packets # - parse individual fields import socket import struct import binascii def ethernetPacket(ethernetHeader): # Ethernet header = 14 first bytes # !6s6s2 # Ethernet destination address # Ethernet source address # Ethernet type eth_hdr = struct.unpack("!6s6s2s", ethernetHeader) print "\nEthernet Packet Header Information:" print "Destination MAC: {}".format(binascii.hexlify(eth_hdr[0])) print "Source MAC: {}".format(binascii.hexlify(eth_hdr[1])) print "Protocol: {}".format(binascii.hexlify(eth_hdr[2])) def ipPacket(ipHeader): # IP header = 20 next bytes # !1s1s1H1H2s1B1B2s4s4s # Version # Service length # Total length # Identification # Fragmentation /Flag # TTL # Protocol # Checksum # Source address # Destination address print "\nIP Header Information:" ip_header = struct.unpack("!1s1s1H1H2s1B1B2s4s4s", ipHeader) verHeadLength = binascii.hexlify(ip_header[0]) serviceField = binascii.hexlify(ip_header[1]) totalLength = str(ip_header[2]) ident = str(ip_header[3]) flagFrag = binascii.hexlify(ip_header[4]) ttl = str(ip_header[5]) protocol = str(ip_header[6]) checkSum = binascii.hexlify(ip_header[7]) srcIp = socket.inet_ntoa(ip_header[8]) dstIp = socket.inet_ntoa(ip_header[9]) print "Version:{}".format(verHeadLength) print "Service Length:{}".format(serviceField) print "Total Length:{}".format(totalLength) print "Identification:{}".format(ident) print "Fragmentation/Flag offset:{}".format(flagFrag) print "TTL:{}".format(ttl) print "Protocol:{}".format(protocol) print "Checksum:{}".format(checkSum) print "Source IP:{}".format(srcIp) print "Destination IP:{}".format(dstIp) def tcpPacket(tcpHeader): # TCP header = 20 next bytes # !HHII2sH2sH # Source port # Destination port # Sequence Number # Acknowledgement # TCP header length # Window Size # Checksum # Urgent Pointer print "\nTCP Header Information" tcp_header = struct.unpack("!HHII2sH2sH", tcpHeader) destPort = str(tcp_header[0]) srcPort = str(tcp_header[1]) seqNo = str(tcp_header[2]) ackNo = str(tcp_header[3]) headerLength = binascii.hexlify(tcp_header[4]) windowSize = str(tcp_header[5]) checkSum = binascii.hexlify(tcp_header[6]) urgentPointer = str(tcp_header[7]) print "Source Port:{}".format(srcPort) print "Dest Port:{}".format(destPort) print "Sequence Number:{}".format(seqNo) print "Acknowledgement:{}".format(ackNo) print "TCP header length:{}".format(headerLength) print "Window Size:{}".format(windowSize) print "Checksum:{}".format(checkSum) print "Urgent Pointer:{}".format(urgentPointer) # Starting the stuff # sudo ifconfig eth0 promisc up # sudo python2 script_name.py # 0x0800 is internet protocol packet , see IF_ETHER.H in /usr/include/linux rawSocket=socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800)) maxBuffer = 65535 while True: pkt = rawSocket.recvfrom(maxBuffer) print "\nRAW PACKET:\n{}".format(pkt) ethernetPacket(ethernetHeader = pkt[0][0:14]) ipPacket(ipHeader=pkt[0][14:34]) tcpPacket(tcpHeader=pkt[0][34:54])
RAW PACKET:
('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x01\xd4\xf7\[email protected]\[email protected]\x11D\x0b\x7f\x 00\x00\x01\x7f\x00\x00\x01\x82\xb6\x82\xb6\x01\xc0\xff\xd3\x02\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x 00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\xee\x04\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x 00\x00\x00\x00\x00p\n\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x0 0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x0 0\x00\x00\x00o\n\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00 \x00\x00\x95\x0b\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00 \x00\x00', ('lo', 2048, 0, 772, '\x00\x00\x00\x00\x00\x00'))
Ethernet Packet Header Information:
Destination MAC: 000000000000
Source MAC: 000000000000
Protocol: 0800
IP Header Information:
Version :45
Service Length: 00
Total Length: 468
Identification: 63243
Fragmentation/Flag offset: 4000
TTL: 64
Protocol: 17
Checksum: 440b
Source IP: 127.0.0.1
Destination IP: 127.0.0.1
TCP Header Information
Source Port : 33462
Dest Port : 33462
Sequence Number : 29425619
Acknowledgement : 33554432
TCP header length : b801
Window Size: 0
Checksum: 0000
Urgent Pointer: 0
('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x01\xd4\xf7\[email protected]\[email protected]\x11D\x0b\x7f\x 00\x00\x01\x7f\x00\x00\x01\x82\xb6\x82\xb6\x01\xc0\xff\xd3\x02\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x 00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\xee\x04\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x 00\x00\x00\x00\x00p\n\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x0 0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x0 0\x00\x00\x00o\n\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00 \x00\x00\x95\x0b\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00 \x00\x00', ('lo', 2048, 0, 772, '\x00\x00\x00\x00\x00\x00'))
Ethernet Packet Header Information:
Destination MAC: 000000000000
Source MAC: 000000000000
Protocol: 0800
IP Header Information:
Version :45
Service Length: 00
Total Length: 468
Identification: 63243
Fragmentation/Flag offset: 4000
TTL: 64
Protocol: 17
Checksum: 440b
Source IP: 127.0.0.1
Destination IP: 127.0.0.1
TCP Header Information
Source Port : 33462
Dest Port : 33462
Sequence Number : 29425619
Acknowledgement : 33554432
TCP header length : b801
Window Size: 0
Checksum: 0000
Urgent Pointer: 0
Je vous demanderais donc comme d'habitude d’être indulgent, de tester le script par vous même , et de me faire un retour pour savoir que ça ne va pas, voire pas du tout, ou le contraire.
ATTENTION:
pour rester dans la légalité , je vous invite a lire le document "Les aspects juridiques du scan et des tests intrusifs - OSSIR" a la partie "Légalité du sniffing" : www.ossir.org/jssi/jssi2010/2A.pdf
Commentaire