Итак, у меня есть несколько вопросов о сокетах и программировании снифферов... Я только начал программировать, и у меня есть проект, в котором я хотел бы использовать информацию, отправляемую по моей сети.
Я попытался просмотреть несколько видеороликов на YouTube, в которых немного рассказывается об этом процессе, и попытался найти лучший материал для дальнейшего изучения, но я не смог найти источник, который имел бы для меня смысл.
Код, который я включил, взят из видео на YouTube и, казалось, имел смысл, когда они его объяснили, но я предполагаю, что он мог использовать Linux или что-то еще, потому что Windows не поддерживала AF_PACKET. После некоторых исследований я обнаружил, что люди используют AF_INET, но я получил ошибку:
OSError: [WinError 10043] Запрошенный протокол не настроен в системе или для него не существует реализации
Есть ли место или способ, которым кто-то мог бы немного объяснить мне сокеты? Я не планирую использовать Windows для окончательной версии этого проекта, и я также планирую изменить его для Bluetooth в будущем, поэтому я хотел бы узнать причины, лежащие в основе вещей, если я смогу найти способ сделать это.
`импортировать структуру импорта сокета, импортировать текстовую обертку
def main():
conn = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.ntohs(3))
while True:
raw_data, addr = conn.recvfrom(65535)
dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data)
print('\nEthernet Frame:')
print('Destination: {}, Source: {}, Protocol: {}'.format(dest_mac, src_mac, eth_proto, data[:14]))
#unpack ethernet frame
def ethernet_frame(data):
dest_mac, src_mac, proto = struct.unpack('! 6s 6s H', data[:14])
return get_mac_addr(dest_mac), get_mac_addr(src_mac), socket.htons(proto), data[14:]
#Get Mac Address
def get_mac_addr(bytes_addr):
bytes_str = map('{:02x}'.format, bytes_addr)
return ':'.join(bytes_str).upper()
main()
`