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

问题描述

我正在使用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. 我单击“开始->选项”,然后在此处选择用于连接互联网的“ Wi-fi”。 “链路层头”是“以太网”。
  2. 然后我在Wireshark上看到了不同的数据包或即将到来的数据包(UDP,TCP,TLS等)
  3. 我在Ecplipse上启动Java程序,输入字符串,发送并接收大写版本,如下所示 如上所述。
  4. 然后我停止了Wireshark。

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

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

另一件事是,尽管我删除了所有浏览器缓存,但并不是我访问的所有网站都可以在WireShark上看到。我访问了一个网站,但在WireShark上看不到它。我单击了该站点上指向Wikipedia的链接,但这也是不可见的。

但是随后我访问stackoverflow.com,它在WireShark上可见,我得到响应“ 301永久移动”。

解决方法

在Linux上,您需要在环回接口上捕获数据包。在Windows上,您必须安装Npcap并选择Npcap回送接口。 AFAIK Npcap随附于Wireshark安装程序。

不确定是否需要root用户(在Linux上)或Administrator(在Windows上)来捕获流量。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...