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