getPortsAndAddresses 函数详解
📍 script.js 取 socket 的源/目的地址和端口。
📎 源码在线查看:
script.js#L219-L253(getPortsAndAddresses)
做什么
给一个 fd(或 Socket 实例),返回 {src_addr, src_port, dst_addr, dst_port} 填入 message。
实现路径
Native 路径(fd)
javascript
var SSL_get_fd = new NativeFunction(p, 'int', ['pointer']);
var fd = SSL_get_fd(ssl);
// 用 fd 查 socket 地址(getsockname/getpeername 或 Java Socket)Java 路径(Socket 实例)
javascript
var localAddr = socket.getLocalSocketAddress();
var peerAddr = socket.getRemoteSocketAddress();
// 解析 InetSocketAddress地址解析
javascript
var ip = addr.getAddress().getHostAddress();
if (ip.indexOf(":") !== -1) {
// IPv4-mapped IPv6: ::ffff:1.2.3.4
ip = ip.split(":").pop();
}
var num = ipToNumber(ip);
var bigEndian = ntohl(num);端口
javascript
message[src_dst + "_port"] = sockAddr.port & 0xFFFF;端口取低 16 位。
失败情况
| 情况 | 结果 |
|---|---|
| SSL_get_fd 返回 0 | fd 无效,地址为 0 |
| socket 已关闭 | getLocalSocketAddress 返回 null |
| IPv6 纯地址 | 当前只处理 IPv4,可能异常 |
地址为 0 时 pcap 里显示 0.0.0.0,见 zero-address。