Ich bin Windows 10 ausgeführt. Ich hatte vor Kurzem ein Problem mit meinem Computer diagnostiziert, bei dem jedes an ein Multicast-Ziel gesendete Paket über die Loopback-Schnittstelle und nicht über die 'Standard'-Schnittstelle gesendet wird (siehe meine Abenteuer here).UDP-Paket an ein Multicast-Ziel gesendet wird über die Loopback-Schnittstelle gesendet
Beispielcode:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(b"herpyderp", ('224.0.0.251', 5353))
Das Paket wird nur auf die lokale Schleife gesehen (verwendet Microsoft Message Analyzer sniff).
Ich habe versucht, die Routing-Tabelle über route print
Inspektion und bekam die folgende Ausgabe:
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.0.10.138 10.0.10.30 35
10.0.10.0 255.255.255.0 On-link 10.0.10.30 291
10.0.10.30 255.255.255.255 On-link 10.0.10.30 291
10.0.10.255 255.255.255.255 On-link 10.0.10.30 291
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 10.0.10.30 291
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 10.0.10.30 291
===========================================================================
Sie werden die Metrik beachten gibt sollte das Paket durch meine ‚default‘ Schnittstelle gesendet werden.
Ich habe dann versucht, über die PowershellGet-NetIPInterface
Cmdlets die Schnittstellenmetrik Inspektion (als here impliziert), und bekam die folgende Ausgabe:
ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- -------------- ------------- ------------ --------------- ---- --------------- -----------
2 Ethernet 3 IPv6 1500 35 Enabled Connected ActiveStore
7 Ethernet IPv6 1500 5 Enabled Disconnected ActiveStore
1 Loopback Pseudo-Interface 1 IPv6 4294967295 75 Disabled Connected ActiveStore
3 isatap.home IPv6 1280 75 Disabled Disconnected ActiveStore
17 Teredo Tunneling Pseudo-Inte... IPv6 1280 75 Enabled Connected ActiveStore
2 Ethernet 3 IPv4 1500 35 Enabled Connected ActiveStore
7 Ethernet IPv4 1500 5 Enabled Disconnected ActiveStore
1 Loopback Pseudo-Interface 1 IPv4 4294967295 75 Disabled Connected ActiveStore
Sie werden das InterfaceMetric
Feld scheint beachten Sie auch mein Paket, um anzuzeigen, sollte über die "Standard" -Schnittstelle und nicht über die Loopback-Schnittstelle gesendet werden.
Erzwingen, dass der Socket das Paket über eine andere Schnittstelle über s.setsockopt(socket.IP_MULTICAST_IF, ...)
sendet, funktioniert, aber das sollte ich nicht tun müssen.
Sie werden feststellen, dass zwei Ethernet-Schnittstellen zu zwei Netzwerkkarten auf meinem Motherboard entsprechen. Als ich das Kabel an Ethernet anstelle von Ethernet 3 angeschlossen habe, begann der Code oben, wie erwartet zu reagieren, und das Paket wurde über diese Schnittstelle und nicht über die Loopback-Schnittstelle gesendet.
Was ist los?
Deaktivieren der Firewall hat nicht geholfen. Es ist kein Firewall-Problem, da das Paket tatsächlich gesendet wird - es wird nur über die Loopback-Schnittstelle gesendet. – DoomMuffins