如何在 Wireshark 上找到我的 Java 应用程序的数据包?

How can I find my packets of my Java application on Wireshark?

我正在使用 Windows 10.

我在 Java 上有这个服务器程序:

    import java.io.*;
import java.net.*;

public class TCPServer {
    
    public static final int TCP_SERVER_PORT = 6789;    //mer eller mindre tilfeldig valg portnr.
    
    public static void main(String args[]) throws Exception
    {
        String setningFraKlient;
        String oversattSetning;

        //Lytter på port TCP_SERVER_PORT:
        System.out.println("Lytter paa TCP-port " + String.valueOf(TCP_SERVER_PORT) + " ...");     
        
        ServerSocket welcomeSocket = new ServerSocket(TCP_SERVER_PORT);
        while(true) {
            //Tjeneren venter, 'henger' på accept(), på at klienten skal ta kontakt:
            Socket connectionSocket = welcomeSocket.accept();
          
            //Fortsetter, skriver ut IP-adressen til klienten:
            System.out.println("Kontakt med: " + connectionSocket.getRemoteSocketAddress().toString());     
            
            //Kopler connectionsocket til InputStream:
            InputStreamReader isr = new InputStreamReader(connectionSocket.getInputStream());
    
            BufferedReader fraKlient = new BufferedReader(isr);
            
            //Kopler OutputStream til connectionsocket:
            DataOutputStream tilKlient = new DataOutputStream(connectionSocket.getOutputStream());

            //Leser data fra klienten:
            setningFraKlient = fraKlient.readLine();
            System.out.println("Tekst fra klient: " + setningFraKlient);     
            
            //Oversetter til store bokstaver:
            oversattSetning = setningFraKlient.toUpperCase() + '\n';
            System.out.println("Gjør om til store bokstaver, returnerer:" + oversattSetning);
            
            //Sender store bokstaver i retur:
            tilKlient.writeBytes(oversattSetning);
        }
    }
}

并且 Java 上的这个客户端程序:

import java.io.*;
import java.net.*;

public class TCPClient {
    public static void main(String args[]) throws Exception
    {
        String sentence="";
        String modifiedSentence="";

        //Oppretter forbindelse mot localhost på port 6789:
        Socket clientSocket = new Socket("localhost", TCPServer.TCP_SERVER_PORT);
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        //Spør bruker etter tekst:
        System.out.print("Skriv inn tekst: ");
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        sentence = inFromUser.readLine();
        outToServer.writeBytes(sentence + '\n');
        modifiedSentence = inFromServer.readLine();

        //Skriv ut tekst som store bokstaver:
        System.out.println("\nTekst som store bokstaver: ");
        System.out.println(modifiedSentence);

        //Lukk socket og avslutt:
        clientSocket.close();
    }
}

如您在服务器代码中所见,我使用“localhost”来测试程序,并且使用端口号 6789。

当我 运行 程序按预期运行时:

  1. 我先运行服务器程序。
  2. 然后我运行客户端程序。
  3. 我将一些消息写成字符串。
  4. 我得到字符串,其中所有字母都转换为大写。

我启动 WireShark 并执行以下操作:

  1. 我单击“前往 -> 选项”,然后我 select 显示我用来连接互联网的“Wi-fi”。 “Link-layer header”是“Ethernet”。
  2. 然后我在 Wireshark 上看到不同的数据包或即将到来(UDP、TCP、TLS 等)
  3. 我在 Eclipse 上启动 Java 程序,输入字符串,发送并接收大写版本 如上所述。
  4. 然后我停止了 Wireshark。

Wireshark 中的过滤器行是空白的,那里没有过滤器。 我可以在 Wireshark 中看到很多数据包。 但是我找不到任何使用端口号 6789 的数据包,尽管我的应用程序正在使用它。 而且我找不到任何名称为 Java.

的数据包

简而言之,我找不到在我的 Java 应用程序上发送的数据包。为什么会这样?我怎样才能找到包裹?

另一件事是,尽管我删除了所有浏览器缓存,但并不是我访问的所有网站都在 WireShark 上可见。我访问了一个网站,但它在 WireShark 上是不可见的。我在指向维基百科的站点中单击 link,但它也是不可见的。

但后来我访问 whosebug.com 它在 WireShark 上可见,我收到响应“301 永久移动”。

在Linux,您需要在环回接口上捕获数据包。在 Windows 上,您必须安装 Npcap 和 select Npcap 环回接口。 AFAIK Npcap 附带 Wireshark 安装程序。

不确定您是否需要成为根用户(Linux)或管理员(Windows)才能捕获流量。