Cześć. Piszę program coś typu WireShark z tego poradnika https://www.youtube.com/watch?v=WGJC5vT5YJo&list=PL6gx4Cwl9DGDdduy0IPDDHYnUx66Vc4ed&index=1. Nie wiem dlaczego, ale chociaż zaimportowałem bibliotekę socket i uruchomiłem program z prawami administratora to wyskakuje mi taki błąd:
Traceback (most recent call last):
File "sniffer.py", line 27, in <module>
main()
File "sniffer.py", line 6, in main
conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))
AttributeError: module 'socket' has no attribute 'AF_PACKET'
Dlaczego tak się dzieje? Jak to naprawić? Dzięki za odpowiedzi.
import socket
from _struct import *
def main():
conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))
while True:
raw_data, addr = conn.recvfrom(65536)
dest_mack, src_mack, eth_proto, data = ethernet_frame(raw_data)
print("\nEthernet Frame: ")
print("Destination: {}, Source: {}".format(dest_mack, src_mack, eth_proto))
#Unpack ethernet frame
def ethernet_frame(data):
dest_mack, src_mack, proto = _struct.Unpack("! 6s 6s H", data[:14])
return get_mack_addr(dest_mack), get_mack_addr(src_mack), socket.htons(proto), data[14:]
# Return properly formatted MAC address (ie AA:BB:CC:DD:EE:FF)
def get_mack_addr(bytes_addr):
bytes_str = map("{:02x}".format,bytes_addr)
return ":".join(bytes_str).upper()
main()