我需要创建一个类似于WireShark的java应用程序,因为它能够侦听UDP流量。但我需要更多地了解数据报而不仅仅是数据,我需要知道发送者的IP和mac地址。有没有办法在Java中实现这个目标?
以下是我从Wireshark谈论的屏幕截图
请注意,以太网II堆栈具有mac,Internet Protocoal版本4具有Src Ip。
这种情况的用例是网络上有多个设备发送数据(如本消息中所示:STS:ANT:OK:8)。但是我需要知道这个发送者的mac和IP是什么,所以我可以通过发送者和mac对msgs进行分类。 (从技术上讲,我可以在网络上有重复的IP。)因此两者都是必需的。这也允许我显示发生这种情况的错误情况。
答案 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);
}
}