在java中是否有一种方法可以监听UDP广播消息并获取发送消息的源IP地址和Mac

问题描述 投票:0回答:1

我需要创建一个类似于WireShark的java应用程序,因为它能够监听UDP流量。但我需要了解更多关于数据报而不仅仅是数据,我需要知道发送者的IP和mac地址。有没有办法在Java中实现这一目标?

这是我从Wireshark谈论的屏幕截图

WireShark Image

请注意,以太网II堆栈具有mac,而Internet协议版本4具有Src Ip。

这种情况的用例是网络上有多个设备发送数据(如本消息中所示:STS:ANT:OK:8)。但是我需要知道这个发送者的mac和IP是什么,所以我可以通过发送者和mac对msgs进行分类。 (从技术上讲,我可以在网络上有重复的IP。)因此两者都是必需的。这也允许我显示发生这种情况的错误情况。

java networking udp
1个回答
0
投票

IP协议是UDP / TCP或其他层的基础工具。您可能需要捕获数据包并侦听特定端口(UDP端口的过滤器IP消息)

否则,您可以使用外部服务器命令来更有效地完成它。

这是一个例子(来自How could I sniff network traffic in Java?):

public static void main(String[] args) throws Exception {
    File f = new File("sample.pcap");

    EthernetDecoder eth = new EthernetDecoder();
    IpDecoder ip = new IpDecoder();
    TcpDecoder tcp = new TcpDecoder(new TcpPortProtocolMapper());
    UdpDecoder udp = new UdpDecoder(new UdpPortProtocolMapper());

    eth.register(EthernetType.IPV4, ip);
    ip.register(InternetProtocol.TCP, tcp);
    ip.register(InternetProtocol.UDP, udp);

    PcapInputStream is = new PcapFileInputStream(f);
    while (true) {
        // getPacket() will throws EOFException and you should call is.close() 
        PcapPacket packet = is.getPacket();
        eth.decode(packet);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.