2016-07-15 68 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