Bonjour ,
Je viens partager avec vous un nouvel exercice auquel j'ai du répondre.
Voici l’énoncé:
Citation:
# Create a packet sniffer using raw sockets which can parse TCP packets
# - 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])
Citation:
RAW PACKET:
('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x01\xd4\xf7\x0b@\x00@\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" : http://ift.tt/1DW6AhZ
from Hackademics : Forum de hacking  hackers white hat  cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1DW6BT6
via IFTTT
Aucun commentaire:
Enregistrer un commentaire