Я пытаюсь создать скрипт инъекции пакетов в python, но пакеты с такой инъекцией не отображаются в tcpdump. Я использовал эту команду: tcpdump -i eth0 -vv, и не было пакета ARP, который я пытался внедрить.
Я даже пытался увидеть пакет в wireshark, но та же проблема! Не виден пакет
def packetInjector(message,protocol,interface):
if protocol == 1:
print "Protocol Selected: ARP"
rawSocket = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x800))
rawSocket.bind((interface,socket.htons(0x800)))
eth_packet = struct.pack("!6s6s2s","\xaa\xaa\xaa\xaa\xaa\xaa","\xbb\xbb\xbb\xbb\xbb\xbb","\x08\x00")+message
arp_hardwareType = "\x00\x01"
arp_protocolType = "\x08\x00"
arp_hlen = "\x06"
arp_plen = "\x04"
arp_op = "\x00\x01" # 1 for request and 2 for ARP reply
arp_src_mac = "\xaa\xaa\xaa\xaa\xaa\xaa"
arp_dst_mac = "\xbb\xbb\xbb\xbb\xbb\xbb"
srcIp = raw_input("Enter the source IP: ")
arp_src_ip = formatIP(srcIp)
dstIp = raw_input("Enter the destination IP: ")
arp_dst_ip = formatIP(dstIp)
arp = struct.pack("!2s2s1s1s2s6s4s6s4s",arp_hardwareType,arp_protocolType,arp_hlen,arp_plen,arp_op,arp_src_mac,arp_src_ip,arp_dst_mac,arp_dst_ip)
while len(arp)<46:
arp=arp+struct.pack("B",0x00)
packet = eth_packet+arp
rawSocket.send(packet)
print "Packet Sent!"
elif protocol == 2 :
print "Protocol Selected:ETH"
rawSocket = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x800))
rawSocket.bind((interface,socket.htons(0x800)))
eth_packet = struct.pack("!6s6s2s","\xaa\xaa\xaa\xaa\xaa\xaa","\xbb\xbb\xbb\xbb\xbb\xbb","\x08\x00")+message
rawSocket.send(eth_packet)
print "Ethernet packet send!"
else:
print "Enter valid number!"
Я ожидаю вывода как обнаружение пакета ARP в tcpdump.
Вот кое-что, что может быть связано. Я выполнил эту команду в scappy как
pkt = sniff(iface="eth0",filter="icmp",count=2)
и выполнение ping -I wlan0 google.com
не записывается в pkt. Это главная проблема, которая, как мне кажется, не позволяет мне видеть пакеты ARP.