2016-07-15 4 views
0

Ich habe einen Socket-Server, der einige eingehende Verbindungsanforderungen unterbricht (es stoppt auf diese Anforderungen für genau eine Minute auf stream_socket_accept(), obwohl default_socket_timeout 10s ist).Hot, IP der Anfrage zu erhalten, bevor Socket-Verbindung akzeptiert?

Gibt es eine Möglichkeit, die IP-Adresse des Clients zu erhalten, bevor Sie stream_socket_accept() ausführen?

Gibt es Serverprotokolle, die einen Einblick geben, was auf einer tieferen Ebene passiert, wenn jemand einen bestimmten Port auf dem Server anpingt?

Vielleicht könnte ich dieses Problem auf diese Weise verfolgen.

Antwort

1

Sie können die Remote-IP-Adresse nicht abrufen, bevor Sie die Verbindung akzeptieren. Sie müssen stattdessen eine Firewall verwenden.

Sie könnten entweder stream_socket_get_name (Socket, true) nach stream_socket_accept verwenden oder die 3-Parameter-Version von stream_socket_accept verwenden, mit der Sie ein Zeitlimit festlegen und die Remote-IP zurückgeben können.

+0

Sind Sie sicher? Da ich Stream_socket_accept noch nicht aufgerufen habe, habe ich nicht den Socket, mit dem ich stream_socket_get aufrufen könnte, oder? –

+0

Eigentlich können Sie die Remote-IP-Adresse nicht erhalten, bevor die Verbindung angenommen wird. Wenn Sie müssen, müssen Sie eine Firewall verwenden. Siehe auch: [link] (http://stackoverflow.com/questions/6418603/linux-tcp-server-reading-clients-ip-address-before-accepting-connection). –

+0

@ArminHierstetter oder du brauchst eigentlich deinen eigenen TCP-Stack ... stream_socket_accept() erstellt eigentlich nur einen Dateideskriptor zum Socket im aufrufenden Programm und entfernt ihn aus dem Backlog. Das eigentliche SYN/ACK-Senden geschieht transparent im Kernel vor dem _accept() _ syscall. – bwoebi

Verwandte Themen