Как я могу создать кадр ICMP отмечает malformet пакета на питонеискаженного Packet на ICMP питоне
импорта гнездо, структура, UUID, подпроцесс, Fcntl, время, случайное
Список пункт
из binascii импорта hexlify, unhexlify от даты и времени импорта DateTime просмоленной = raw_input ('Ingrese Номбр де Tarjeta де Красный Utilizada: ') subprocess.call ([' ifconfig ', tarRed,' promisc ']) pt = 0x0800 s = socket.socket (socket.AF_PACKET, socket.SOCK_RAW, socket.htons (pt)) s.bind ((tarRed, pt)) #GETCheck def getchecksum (ip_header, size): cksum = 0 pointer = 0 while size> 1: cksum + = int ((str ("% 02x"% (ip_header [pointer],)) + str ("% 02x"% (ip_header [указатель + 1],))), 16) size - = 2 указатель + = 2 #if размер: # Это объясняет ситуацию, когда заголовок нечетный #cksum + = int (ip_header [pointer]) cksum = (cksum >> 16) + (cksum & 0xffff) cksum + = (cksum >> 16) return (~ cksum) & 0xFFFF def _checksum (data): # вычислять заголовок sum ip_header_sum = sum (struct.unp ack_from ("6H", данные)) #add перенос ip_header_sum = (ip_header_sum & 0xFFFF) + (ip_header_sum >> 8 & 0xFFFF) ip_header_sum = ~ ip_header_sum & 0xFFFF возвращающие ip_header_sum Защиту i_checksum (checksum_packet): Всего = 0 NUM_WORDS = len (checksum_packet)/2 для chunk в struct.unpack ("!% SH"% num_words, checksum_packet [0: num_words * 2]): total + = chunk if len (checksum_packet)% 2: total + = ord (checksum_packet [-1]) < общая + = итого >> 16 возврата (~ общая + 0xffff & 0xffff)
def checksum(source_string): sum = 0 countTo =
(len(source_string)/2)*2 count = 0 while count<countTo:
thisVal = ord(source_string[count + 1])*256 + ord(source_string[count]) sum = sum + thisVal sum = sum &
0xffffffff
count = count + 2 if countTo<len(source_string): sum = sum + ord(source_string[len(source_string) - 1]) sum = sum &
0xffffffff sum = (sum >> 16) + (sum & 0xffff) sum = sum + (sum
>> 16) answer = ~sum answer = answer & 0xffff #answer = answer >> 8 | (answer << 8 & 0xff00) return answer def
checksuma(source_string): sum = 0 countTo =
(len(source_string)/2)*2 count = 0 while count<countTo:
thisVal = ord(source_string[count + 1])*256 + ord(source_string[count]) sum = sum + thisVal sum = sum &
0xffffffff
count = count + 2 if countTo<len(source_string): sum = sum + ord(source_string[len(source_string) - 1]) sum = sum &
0xffffffff sum = (sum >> 16) + (sum & 0xffff) sum = sum + (sum
>> 16) answer = ~sum answer = answer & 0xffff answer = answer >> 8 | (answer << 8 & 0xff00) return answer def ultimo(str):
csum = 0
countTo = (len(str)/2) * 2
count = 0
while count < countTo:
thisVal = ord(str[count+1]) * 256 + ord(str[count])
csum = csum + thisVal
csum = csum & 0xffffffff
count = count + 2
if countTo < len(str):
csum = csum + ord(str[len(str) - 1])
csum = csum & 0xffffffff
csum = (csum >> 16) + (csum & 0xffff)
csum = csum + (csum >> 16)
answer = ~csum
answer = answer & 0xffff
answer = answer >> 8 | (answer << 8 & 0xff00)
return answer
#GETCheck
#MACs adst='ffffffffffff' mac_destino = unhexlify(adst) ma = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) info =
fcntl.ioctl(ma.fileno(), 0x8927, struct.pack('256s', tarRed[:15]))
asrc = ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]
sd = asrc.split(':') asrc = sd[0]+sd[1]+sd[2]+sd[3]+sd[4]+sd[5]
mac_origen = unhexlify(asrc)
#MACs cabEther = struct.pack('!6s6sh',mac_destino,mac_origen,pt)
#datosIP
#version = '4'
#IHL = '5' tipoServicio = unhexlify('00') longitudT = struct.pack('!BB',00,24) identificador = struct.pack('!BB',00,01)
flag_Pos = 0x4000 tiempoVida = 05 ptIP = unhexlify('01') SCC = 0
#IPs ip = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ipO= str(socket.inet_ntoa(fcntl.ioctl(ip.fileno(),0x8915,struct.pack('256s',
tarRed[:15]))[20:24])) ipO1 = ipO.split('.') ipOr =
struct.pack("!BBBB",int(ipO1[0]),int(ipO1[1]),int(ipO1[2]),int(ipO1[3]))
ipD = raw_input('Ingrese la direccion IP destino: ') ipD1 =
ipD.split('.') ipDest =
struct.pack("!BBBB",int(ipD1[0]),int(ipD1[1]),int(ipD1[2]),int(ipD1[3]))
#IPs
#datosIP cabIP = struct.pack('!1s1s2s2shB1sH4s4s',unhexlify('45'),tipoServicio,longitudT,identificador,flag_Pos,tiempoVida,ptIP,SCC,ipOr,ipDest)
SCC = checksum(cabIP) cabIP =
struct.pack('!1s1s2s2shB1sH4s4s',unhexlify('45'),tipoServicio,longitudT,identificador,flag_Pos,tiempoVida,ptIP,socket.htons(SCC),ipOr,ipDest)
#datosIcmp tipo = 8 codigo = 0x00 check = 0x0000 identificador = int((id(1) * random.random()) % 65535) secuencia = 0x0000
#datos = 'qwertyasdfghzxcvbn0102030405060708091011121314151617181920' datos =
1 * 'Q'
#datosIcmp cabIcmp = struct.pack('!bbHHh',tipo,0,0,identificador,1) my_checksum = ultimo(cabIcmp + datos) cabIcmp =
struct.pack('!bbHHh',tipo,0,socket.htons(my_checksum),identificador,1)
cabIcmp = cabIcmp + datos tiempo = datetime.now() print tiempo for i
in range(15): s.send(cabEther + cabIP + cabIcmp,0)
Что это за беспорядок кода? Даже если вы исправите форматирование, чтобы мы могли его прочитать, что он должен делать _do_ и _why_? Как это связано с вопросом? И что именно вы застряли? – abarnert