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

时间:2017-12-22 19:10:22

标签: java networking udp

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

以下是我从Wireshark谈论的屏幕截图

WireShark Image

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

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

1 个答案:

答案 0 :(得分: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);
    }
}