Я пытаюсь пронюхать пакеты, но получаю странный вывод и не понимаю причины..
Вот мой код пожалуйста, помогите мне
(я использую Python 3.6 на Windows 8.1)
Код:
import socket
import struct
import binascii
import textwrap
def main():
# Get host
host = socket.gethostbyname(socket.gethostname())
print('IP: {}'.format(host))
# Create a raw socket and bind it
conn = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
conn.bind((host, 0))
# Include IP headers
conn.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
# Enable promiscuous mode
conn.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
while True:
# Recive data
raw_data, addr = conn.recvfrom(65536)
# Unpack data
dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data)
print('\nEthernet Frame:')
print("Destination MAC: {}".format(dest_mac))
print("Source MAC: {}".format(src_mac))
print("Protocol: {}".format(eth_proto))
# Unpack ethernet frame
def ethernet_frame(data):
dest_mac, src_mac, proto = struct.unpack('!6s6s2s', data[:14])
return get_mac_addr(dest_mac), get_mac_addr(src_mac), get_protocol(proto), data[14:]
# Return formatted MAC address AA:BB:CC:DD:EE:FF
def get_mac_addr(bytes_addr):
bytes_str = map('{:02x}'.format, bytes_addr)
mac_address = ':'.join(bytes_str).upper()
return mac_address
# Return formatted protocol ABCD
def get_protocol(bytes_proto):
bytes_str = map('{:02x}'.format, bytes_proto)
protocol = ''.join(bytes_str).upper()
return protocol
main()
Из этого кода я получаю этот вывод:
IP: 192.168.1.12
Кадр Ethernet:
MAC-адрес назначения: 45:00:00:43:00:00
MAC-адрес источника: 40:00:2C:11:48:D3 >
Протокол: 4266
Кадр Ethernet:
MAC-адрес назначения: 45:00:00:42:11:E7
MAC-адрес источника: 00:00:80:11:00:00 >
Протокол: C0A8
Кадр Ethernet:
MAC-адрес назначения: 45:00:00:33:04:D6
MAC-адрес источника: 00:00:80:11:00:00 >
Протокол: C0A8
.
.
.
Согласно списку EtherType, эти протоколы не существуют, и, анализируя мой трафик с помощью Wireshark, я уверен, что этот MAC не существует в моей локальной сети
Так что я определенно делаю что-то не так, но я не понимаю, что
Заранее спасибо