Wir versuchen, mit dem Server zu kommunizieren unter Linux Loopback-Schnittstelle über Raw-Socket zu hören und es scheint, als ob der Server nicht ein einziges Paket von uns bekommen. Die Pakete, die wir senden, sind in Wireshark sichtbar.Ist Raw-Socket auf Loopback-Schnittstelle möglich?
Ist Raw Socket on Loopback überhaupt möglich? (Bitte fragen Sie nicht, warum wir sie brauchen: es zu kompliziert ist, hier zu erklären)
EDIT: Das ist, wie wir es öffnen
_I_RawSocket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)))
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_ifrn.ifrn_name, _InterfaceName);
ioctl(_I_RawSocket, SIOCGIFINDEX, &ifr)
memset(&sll, 0, sizeof(sll));
sll.sll_family = AF_PACKET;
sll.sll_ifindex = ifr.ifr_ifindex;
sll.sll_protocol = htons(ETH_P_ALL);
bind(_I_RawSocket, (struct sockaddr *) &sll, sizeof(sll))
Der Server lighttpd ist und es ist erreichbar über normale Steckdose auf localhost . netstat --raw druckt leere Tabelle, aber ich bin mir absolut sicher, dass wir zwei normale rohe Sockets auf normalen eth Geräten haben.
Bitte senden Sie if_index: a) genau, welche Art von Buchse Sie verwenden, es ist ein AF_PACKET? b) Wie bindst du es, verwendest du bind oder SO_BINDTODEVICE? c) Was ist der Server und was versucht er zu tun? Kannst du mit einem IP-Socket darüber sprechen (angenommen IP hier)? Kannst du die Ausgabe von netstat --raw senden? – MarkR
@MarkR: Angesichts der Tatsache, dass er für rohe Sockets geht, rate ich SOCK_RAW. SOCK_PACKET ist sowieso veraltet. –
Ich finde die "man 7 packet" -Seite sehr nützlich, bitte lesen Sie es und sehen Sie, ob das, was es beschreibt, konsistent ist mit dem, was Sie tun. – MarkR