Я хотел бы пересмотреть код этого короткого сценария, который я написал, чтобы прослушивать многоадресные UDP-пакеты. Я хотел бы подумать, правильно ли я следую сетевым протоколам. Я также хотел бы вывести данные в виде шестнадцатеричного на терминал, я делаю это правильно?
import socket, struct, binascii
ip = input("Enter IP: ")
port = int(input("Enter port: "))
# Create the socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Bind to the server address
s.bind(("", port))
# Tell the operating system to add the socket to the multicast group
# on all interfaces.
mreq = struct.pack("4sl", socket.inet_aton(ip), socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
# Receive loop
while True:
data = s.recv(2048)
print(binascii.hexlify(data))
for i in range(25):
open("test{}".format(i), "wb+").write(data[i:])
# For trying to track specific offsets for static multicasts,
# comment lines 21 and 22, uncomment line below, then change offset value.
# sys.stdout.buffer.write(data[8:])