Ach*_*lle 3 java linux networking stream tunnel
我正在尝试编写一个tcp流'tunnel'(类似于默认情况下的SSH句柄),但有一个例外,我必须在流经时重写某些信息.
我确定那里有类似的东西,但我找不到它.我有三个主要问题:
编辑:重写的信息只是初始身份验证.
eph*_*ent 11
带有日志记录的直通隧道可以从现有(或容易找到的)实用程序拼凑在一起.
socat -v -x tcp-l:8080,fork,reuseaddr tcp:localhost:80 2>log
在此示例中,连接到http://localhost:8080/将传递到http://localhost:80/,并记录传输到的数据log.
TCPreen工具专门用于此目的.
如果您具有root权限,则有许多分析器(如tcpdump和tcpflow)可以直接从网络捕获数据包,而无需重定向流量.
socat也可以使用,cr和,crnl删除/添加/替换\r字符的选项进行一些非常基本的流修改.
在任何情况下,回到最初的问题......自从我编写任何Java以来已经很久了,这是完全未经测试的,但是在重新传输之前可以修改流量的隧道并不困难.
public class ForwardAndChangeCaseThread extends Thread {
private Socket in, out;
public ForwardAndChangeCaseThread(Socket in, Socket out) {
this.in = in; this.out = out;
}
public void run() {
byte[] buf = new byte[4096];
InputStream in = this.in.getInputStream();
OutputStream out = this.out.getOutputStream();
int count;
while ((count = in.read(buf)) > 0) {
for (int i = 0; i < count; i++)
if (buf[i] >= 0x40) buf[i] ^= 0x20;
out.write(buf, 0, count);
}
}
}
public class TcpForwarder {
public static void main(String[] args) {
ServerSocket listen = new ServerSocket(8080, 1);
for (;;) {
Socket local = listen.accept();
Socket remote = new Socket("localhost", 80);
new ForwardAndChangeCaseThread(local, remote).start();
new ForwardAndChangeCaseThread(remote, local).start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4240 次 |
| 最近记录: |