2017-12-22 16 views
0

Ich muss eine Java-Anwendung, die ähnlich wie WireShark funktioniert, in der Lage, UDP zu hören der Verkehr. Aber ich muss mehr über das Datagramm als nur die Daten wissen, ich muss die IP- und MAC-Adresse des Absenders wissen. Gibt es da einen Weg dies in Java zu erreichen?Gibt es eine Möglichkeit in Java UDP-Broadcast-Nachrichten zu hören UND die Quell-IP-Adresse und Mac, die die Nachricht gesendet wurde

Hier ist ein Screenshot von dem, was ich über

WireShark Image

Beachten Sie die Ethernet-II-Stack hat den Mac und das Internet Protocoal Version 4 hat Src Ip von Wireshark spreche.

Der Anwendungsfall davon ist, dass mehrere Geräte im Netzwerk Daten ausgeben (wie in dieser msg ist STS: ANT: OK: 8). Aber ich muss wissen, was der Mac und IP von diesem Absender ist, damit ich die Nachrichten nach Absender und Mac kategorisieren kann. (technisch kann ich doppelte IPs im Netzwerk haben.) So werden beide benötigt. Dadurch kann ich auch Fehlerfälle anzeigen, in denen dies auftritt.

+2

Der MAC wird bedeutungslos. Wenn sich die Quelle nicht in Ihrem lokalen Netzwerksegment befindet, ist die MAC die MAC des Routers, nicht die Quelle. –

+3

_ "technisch kann ich doppelte IPs im Netzwerk haben" _ - Wirklich? Das ist kein funktionierendes Netzwerk. Ich rieche hier ein [XY-Problem] (http://xyproblem.info). –

+1

Sie können die IP-Adresse aus dem 'DatagramPacket' erhalten, aber um den MAC zu erhalten, müssen Sie auf etwas wie [jpcap] ( –

Antwort

0

IP-Protokoll ist zugrunde liegendes Werkzeug für UDP/TCP oder andere Schichten. Möglicherweise müssen Sie die Pakete erfassen und bestimmte Ports abhören (IP-Nachrichten für den UDP-Port filtern).

Andernfalls können Sie externe Serverbefehle verwenden, um es effizienter durchzuführen. Hier

ist ein Beispiel (aus 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); 
    } 
} 
+0

Interessant, werde dies versuchen, wenn ich zurückkomme –

Verwandte Themen