是否可以使用WireShark在localhost(Windows)上进行简单的端口转发类型捕获?
我一直在使用以下Java代码来执行此操作:
package tapnet;
import java.net.*;
import java.io.*;
public class tapnet {
public static String getHexString(byte[] buffer, int buflen) {
StringBuffer sb = new StringBuffer();
for (int i=0; i < buflen; i++ ) {
String hexByte = "00" + Integer.toHexString(buffer[i]);
sb.append(hexByte.substring(hexByte.length()-2));
}
return sb.toString();
}
public static void forwardComms(Socket fromClient, Socket toServer) throws Exception {
byte[] buffer;
int buflen;
InputStream clientIn = fromClient.getInputStream();
InputStream serverIn = toServer.getInputStream();
OutputStream clientOut = fromClient.getOutputStream();
OutputStream serverOut = toServer.getOutputStream();
while (true) {
Long waitTime = 0L;
while ((clientIn.available() == 0) && (serverIn.available() == 0)) {
Thread.currentThread().sleep(1);
waitTime = waitTime + 1;
}
System.out.println("QUIET for "+waitTime+" ms");
if (clientIn.available() > 0) {
buflen = clientIn.available();
buffer = new byte[buflen];
clientIn.read(buffer,0,buflen);
System.out.println("CLIENT: "+getHexString(buffer,buflen));
serverOut.write(buffer,0,buflen);
}
if (serverIn.available() > 0) {
buflen = serverIn.available();
buffer = new byte[buflen];
serverIn.read(buffer,0,buflen);
System.out.println("SERVER: "+getHexString(buffer,buflen));
clientOut.write(buffer,0,buflen);
}
}
}
public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.out.println("Usage: tapnet.tapnet <serverPort> <clientPort> [<serverHost>]");
System.exit(1);
}
int serverPort = Integer.valueOf(args[0]);
int clientPort = Integer.valueOf(args[1]);
String serverHost = "127.0.0.1";
if (args.length == 3) {
serverHost = args[2];
}
System.out.println(clientPort + " to " + serverHost + ":" + serverPort);
ServerSocket listenPort = new ServerSocket(clientPort);
while (true) {
Socket fromClient = listenPort.accept();
Socket toServer = new Socket(serverHost,serverPort);
forwardComms(fromClient,toServer);
}
}
}
但是,我更喜欢使用WireShark,以便可以使用过滤等功能。
如何在WireShark中设置类似内容?
我不认为WireShark可以转发。但是,如果只想捕获数据包,则端口上的正确过滤器应该可以完成此任务。
如果我理解问题的思想,则需要在转发数据包之前对数据包进行过滤(即,仅转发HTTP内容)。在这种情况下,您可以使用libpcap Java包装程序(jpcap或pcap4j)来完成该工作。在此处可以找到类似的问题转发端口4444至3306 。
最后,如果您只需要转发数据包而不过滤它们,并且不需要使用Java,您可能想看看Windows的NetCat(以节省开发和测试的时间)。
希望能帮助到你
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句