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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中是否有一种方法可以监听UDP广播消息并获取发送消息的源IP地址和Mac相关的知识,希望对你有一定的参考价值。

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

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

WireShark Image

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

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

答案

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);
    }
}

以上是关于在java中是否有一种方法可以监听UDP广播消息并获取发送消息的源IP地址和Mac的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中接收 UDP 广播消息

Win 10 应用开发UDP广播

GoogleCast Receiver 应用程序可以在没有发件人应用程序的情况下读取 UDP 消息吗?

udp 能跨网段广播 谁能告诉我udp跨网段怎么发消息,比如192.168.2.1到192.168.13.2去 c#的

像UDP一样广播,具有TCP的可靠性

在节点js中获取UDP的目标地址