Ich versuche, eine Buchse an die spezifische (Loopback) zu binden Schnittstelle lo
außerhalb Verkehr zu verhindern, dass mit ihm zu stören:Bindung Buchse an spezifische Schnittstelle
int bind_socket(uint8_t *iface, uint8_t port) {
int rv;
struct sockaddr_in addr;
rv = socket(AF_INET, SOCK_STREAM, 0);
if (rv < 0) return -1;
if (setsockopt(rv, SOL_SOCKET, SO_BINDTODEVICE, iface, strlen(iface)) < 0) {
return -2;
}
bzero((char *) &addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(port);
if (bind(rv, (struct sockaddr *) &addr, sizeof(addr)) < 0)
return -3;
return rv;
}
...
int ss;
ss = bind_socket("lo", 100);
Allerdings, wenn ich nmap localhost -e wlpXsX
ausführen, sollte ich nicht sein Die Ausgabe, die den Socket anzeigt, ist über diese Schnittstelle verfügbar. Es wird stattdessen als verfügbar gemeldet; und ich kann nicht in der Lage sein, den Grund dafür zu finden. Warum ist diese Schnittstelle global mit einem Programm verfügbar, das dafür ausgelegt ist, dass es für alle anderen Schnittstellen nicht verfügbar ist?
XY Problem? Wenn Sie nur einen Socket für die lokale Kommunikation benötigen, warum verwenden Sie überhaupt den AF_INET-Socket? – SergeyA