当使用 libwebsockets 作为服务器时,我很难理解我应该如何捕获客户端 IP 地址。
根据我对文档的了解,libwebsockets_get_peer_addresses
仅可在LWS_CALLBACK_FILTER_NETWORK_CONNECTION
回调中使用,但此时用户数据结构似乎尚未初始化,因此任何在此处存储的尝试都会出现段错误。
我本来希望 IP 地址在请求标头中,就像 Apache 或 nginx 等其他 Web 服务器一样,但在这个库中,它似乎仅可用于请求过程的特定部分,并且不会复制到标头中.
这就是我在 LWS_CALLBACK_FILTER_NETWORK_CONNECTION 中尝试的内容:
char client_name [IP_SIZE];
char client_ip [IP_SIZE];
libwebsockets_get_peer_addresses(context, wsi, (int)(long)in,
client_name, sizeof(client_name),
client_ip, sizeof(client_ip));
strncpy(pss->ip, client_ip, sizeof(client_ip)); // segfault
我已经测试了strncpy
另一个回调(LWS_CALLBACK_HTTP
)的内部,所以我知道它在初始化后应该可以工作。pss
任何帮助将不胜感激,因为我发现该库的文档很难理解。