2016-07-15 102 views
0

我有一個套接字服務器,打破了一些傳入的連接請求(它停止在stream_socket_accept()雖然default_socket_timeout是10秒)上的這些請求只有一分鐘)。在接受套接字連接之前很熱得到請求的IP地址?

有沒有什麼辦法可以在做stream_socket_accept()之前獲取客戶端的IP地址?

是否存在服務器日誌,可以在有人對服務器上的任何給定端口進行ping操作時深入瞭解更深層次的情況?

也許這樣我可以跟蹤這個問題了。

回答

1

在接受連接之前,您無法獲得遠程IP地址。您必須改用防火牆。

您可以在stream_socket_accept之後使用stream_socket_get_name(socket,true),也可以使用stream_socket_accept的3參數版本,它允許您設置超時並返回遠程IP。

+0

確定嗎?因爲我還沒有調用stream_socket_accept,所以我沒有可以調用stream_socket_get的套接字,呵呵? –

+0

實際上,在接受連接之前,您無法獲得遠程IP地址。如果你需要,你必須使用防火牆。另請參閱:[鏈接](http://stackoverflow.com/questions/6418603/linux-tcp-server-reading-clients-ip-address-before-accepting-connection)。 –

+0

@ArminHierstetter或者你幾乎需要自己的TCP堆棧... stream_socket_accept()實際上只是在調用程序中爲套接字創建一個文件描述符,並將其從積壓文件中移除。實際的SYN/ACK發送在_accept()_ syscall之前在內核中透明地發生。 – bwoebi