【发布时间】:2020-09-16 04:12:22
【问题描述】:
我之前尝试过的方法是从SSL_get_wfd 获取套接字fd,然后将其传递给getpeername。我还查看了 BIO 对象/函数,但没有任何运气。尝试查看 /usr/include/openssl 中的 openSSL 实现,但再次失败。
有人知道如何获取 openSSL 套接字连接的远程 IP 地址(和端口)吗?
一些上下文:
socket fd: 64 // the file descriptor doesn't look incorrect (to me)
after getaddress, socklen: 28 // the length of the plausible address also looks correct
sockaddr ptr: 0x7b0b0fcac0, val: 0x0 // the pointer is empty despite being allocated :(
编辑:我的工作所依据的文档: https://docs.huihoo.com/doxygen/openssl/1.0.1c/structssl__st.html
【问题讨论】:
-
你所描述的应该对我有用。您是否在 getpeername 的输入中正确设置了 addrlen 参数? (请注意,对于所有 C 库,包括 /usr/include 中的标头在内的标头仅包含声明而不包含实现。)
-
我确实正确分配了 addrlen 并且它在 getpeername 之后设置为正确的长度,这让我相信它被正确调用。我没有提到的一个事实是我将这个函数与 Frida 挂钩(将 js 变量传递给 NativeFunctions)。无论如何,我能够使用 SSL_get_servername 获取主机名。
-
如果 addrlen 在 getpeername() 之前(错误地)设置为零,addrlen 将设置为地址的长度('正确'),但地址不会存储在 addr 中;请参阅手册页(或 POSIX)。 SSL_get_servername on client 是 SNI 中 specified 作为 desired 服务器的名称,它并不总是您实际连接到的主机,并且 可以完全省略(尽管在公共网络现在许多服务器拒绝没有 SNI 的握手)。
标签: c openssl ip-address frida