Skip to content

Socket.localAddress / peerAddress ​

🌐 Frida 内置的 socket 地址查询 API,比原生 getsockname/getpeername 更稳。

用法 ​

javascript
var local = Socket.localAddress(sockfd);  // 本端地址
var peer = Socket.peerAddress(sockfd);    // 对端地址
// 返回 { ip: "192.168.1.5", port: 54321 } 或 null

r0capture 的用法 ​

getPortsAndAddresses 用它查源/目的地址端口:

javascript
if ((src_dst[i] == "src") ^ isRead) {
  var sockAddr = Socket.localAddress(sockfd)
} else {
  var sockAddr = Socket.peerAddress(sockfd)
}

为什么不用 getsockname/getpeername ​

虽然 initializeGlobals 也解析了 getsockname/getpeername,但实际用的是 Socket.localAddress/peerAddress:

维度Socket.localAddress/peerAddressgetsockname/getpeername
稳定性Frida 封装,更稳原生调用,需处理 sockaddr 结构
IPv6自动处理需手动处理 sockaddr_in6
Unix socket支持需手动处理
返回 nullsocket 关闭时返回错误码

IPv4-mapped IPv6 处理 ​

sockAddr.ip 可能形如 ::ffff:192.168.1.1(IPv4-mapped IPv6):

javascript
sockAddr.ip.split(":").pop()  // 取最后一段 "192.168.1.1"

返回 null 的降级 ​

socket 被关闭(超时/对端断开)时返回 null,地址端口置 0:

javascript
if (sockAddr == null) {
  message[src_dst[i] + "_port"] = 0
  message[src_dst[i] + "_addr"] = 0
}

相关文档 ​

基于 VitePress 构建 · 教学用途