Прямой сквозной туннель с каротажем может быть выложен вместе с существующими (или легко найденными) утилитами.
<a href="http://www.dest-unreach.org/socat/" rel="noreferrer">socat</a> -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
символов.
В любом случае вернемся к исходному вопросу & hellip; Прошло уже много лет с тех пор, как я написал какую-либо 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();
}
}
}