Socket API
🔌 Java
java.net.Socket类,r0capture 取五元组与 hook 流的来源。
是什么
java.net.Socket 是 Java 的 TCP 客户端 socket 抽象。r0capture 用它:
- 取地址:
socket.localAddress/peerAddress得到本端/对端 IP - hook 流:
getOutputStream/getInputStream拦截读写
r0capture 取五元组
javascript
var socket = this.socket; // hook 时拿到的 Socket 实例
var localAddr = socket.getLocalSocketAddress();
var peerAddr = socket.getRemoteSocketAddress();
// 解析出 IP + 端口关键方法
| 方法 | 返回 | 用途 |
|---|---|---|
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 实例取地址。两条路径互补。