在java中是否有一种方法可以监听UDP广播消息并获取发送消息的源IP地址和Mac
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中是否有一种方法可以监听UDP广播消息并获取发送消息的源IP地址和Mac相关的知识,希望对你有一定的参考价值。
我需要创建一个类似于WireShark的java应用程序,因为它能够监听UDP流量。但我需要了解更多关于数据报而不仅仅是数据,我需要知道发送者的IP和mac地址。有没有办法在Java中实现这一目标?
这是我从Wireshark谈论的屏幕截图
请注意,以太网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的主要内容,如果未能解决你的问题,请参考以下文章
GoogleCast Receiver 应用程序可以在没有发件人应用程序的情况下读取 UDP 消息吗?