Cześć, chcę wysłać pakiet za pomocą raw socket, ale kod nie działa. Wyskakuje mi taki błąd:
File "syn.py", line 18, in <module>
s.send(icmp(), ("192.168.100.1", 80))
File "syn.py", line 14, in icmp
real_chksum = checksum(_struct.pack("!BBHHH", Type, code, chksum, ID, seq))
File "C:\Users\Antoni\Desktop\CTF\checksum.py", line 5, in checksum
s+= ord(data[i]) + (ord(data[i+1]) << 8)
TypeError: ord() expected string of length 1, but int found
I jak przerobić ten program, żeby wysłać pakiet TCP?
import socket
import _struct
from checksum import checksum
from random import randint
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
def icmp():
Type = 8
code = 0
chksum = 0
ID = randint(0, 0xFFFF)
seq = 1
real_chksum = checksum(_struct.pack("!BBHHH", Type, code, chksum, ID, seq))
icmp_pkt = pack("!BBHHH", Type, code, socket.htons(real_chksum), ID, seq)
return icmp_pkt
s.send(icmp(), ("192.168.100.1", 80))
Funkcja checksum:
def checksum(data):
s = 0
n = len(data) % 2
for i in range(0, len(data)-n, 2):
s+= ord(data[i]) + (ord(data[i+1]) << 8)
if n:
s+= ord(data[i+1])
while (s >> 16):
s = (s & 0xFFFF) + (s >> 16)
s = ~s & 0xFFFF
return s