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 } 或 nullr0capture 的用法
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/peerAddress | getsockname/getpeername |
|---|---|---|
| 稳定性 | Frida 封装,更稳 | 原生调用,需处理 sockaddr 结构 |
| IPv6 | 自动处理 | 需手动处理 sockaddr_in6 |
| Unix socket | 支持 | 需手动处理 |
| 返回 null | socket 关闭时 | 返回错误码 |
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
}