Skip to content

Socket API ​

🔌 Java java.net.Socket 类,r0capture 取五元组与 hook 流的来源。

是什么 ​

java.net.Socket 是 Java 的 TCP 客户端 socket 抽象。r0capture 用它:

  1. 取地址:socket.localAddress / peerAddress 得到本端/对端 IP
  2. hook 流:getOutputStream / getInputStream 拦截读写

r0capture 取五元组 ​

javascript
var socket = this.socket;  // hook 时拿到的 Socket 实例
var localAddr = socket.getLocalSocketAddress();
var peerAddr = socket.getRemoteSocketAddress();
// 解析出 IP + 端口

详见 getPortsAndAddresses。

关键方法 ​

方法返回用途
getLocalSocketAddress()InetSocketAddress本端地址+端口
getRemoteSocketAddress()InetSocketAddress对端地址+端口
getOutputStream()OutputStream写流(hook 点)
getInputStream()InputStream读流(hook 点)

InetSocketAddress 解析 ​

javascript
var ISA = Java.use("java.net.InetSocketAddress");
var addr = isa.getAddress();      // InetAddress
var ip = addr.getHostAddress();   // "192.168.1.5"
var port = isa.getPort();         // 54321

与 Native SSL 的协作 ​

对于 TLS 流量,r0capture 主要靠 Native SSL_get_fd → fd → 查 socket 五元组。但有时 fd 查不到(SSL_get_fd 缺失或返回 0),退而用 Java Socket 实例取地址。两条路径互补。

相关文档 ​

基于 VitePress 构建 · 教学用途