使用WireShark在localhost上进行端口转发捕获

矿工小故障

是否可以使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 KVM/QEMU 在 NAT 上进行端口转发

使用不同IP地址上的相同内部端口号在路由器上进行端口转发

如何在Azure上进行负载平衡/端口转发?

如何在WBR-3407a上进行端口转发?

使用网关上的iptables进行端口转发

使用Vagrant进行Nginx的端口转发

使用jsch进行远程端口转发?

如何使用iptables进行本地端口转发

OAuth重定向URI(在不寻常的端口上进行端口转发)

使用NextJS + Express在localhost上进行HTTPS

在启用了OpenVPN客户端的Tomato路由器上进行端口转发

Vagrant ubuntu / trusty64无法在Mac上进行端口转发

使用部分 pod-name 对 kubernetes pod 进行端口转发

如何使用Linux主机进行NAT和端口转发

在Docker容器中使用iptables进行端口转发

使用freeSSHD + PuTTY进行远程端口转发失败

在socat中使用端口转发进行Sed吗?

在Open-Mesh上使用iptables进行端口转发

使用VMWare进行端口转发的正确方法是什么

我应该使用哪个本地IP进行端口转发?

使用spiped进行端口转发的双向加密通信

使用VPN客户端进行端口转发

使用OpenVPN客户端进行端口转发

使用UDP套接字时进行端口转发?

使用iptables和firejail沙箱进行端口转发

使用 2 个路由器进行端口转发

如何使用 libssh2 进行动态端口转发?

如何在“我的”华为调制解调器(Minecraft服务器)上进行端口转发

无法使用Docker SDK中的端口范围语法进行端口转发