首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNetPcap捕获包未返回IP

JNetPcap捕获包未返回IP
EN

Stack Overflow用户
提问于 2017-08-09 04:32:59
回答 1查看 556关注 0票数 0

我在这里有这段代码https://javatutorial.net/capture-network-packages-java,但是它没有返回src或目标ip。我可以通过

代码语言:javascript
复制
            System.out.println("packet.getHeader(ip)");
            System.out.println(packet.getHeader(ip));

Ip:* Ip4 - "ip版本4“- offset=14 (0xE) length=20协议suite=NETWORK

Ip地址:

Ip:版本=4

Ip: hlen =5 5*4= 20字节,无Ip选项

Ip: diffserv = 0x0 (0)

Ip: 0000 00..=代码点:未设置

Ip:......0。= ECN位:未设置

Ip:.......0 =ECE位:未设置

Ip:长度= 137

Ip: id = 0xC22C (49708)

Ip:标志= 0x2 (2)

Ip: 0..=保留

Ip:.1。=1 DF:不分段:设置

Ip:..0 = MF:更多片段:未设置

Ip:偏移量=0

Ip: ttl = 62生存时间

Ip: type =6下一步:传输控制

Ip:校验和= 0xF22E (61998)正确

Ip:来源= 10.222.82.222

Ip:目的地址= 10.222.82.224

Ip地址:

我做错了什么?

代码语言:javascript
复制
`import java.util.ArrayList;
 import java.util.List;
 import org.jnetpcap.Pcap;
 import org.jnetpcap.PcapIf;
 import org.jnetpcap.packet.PcapPacket;
 import org.jnetpcap.packet.PcapPacketHandler;
 import org.jnetpcap.protocol.network.Ip4;
public class PackageCapture {
public static void main(String[] args) {
    List<PcapIf> alldevs = new ArrayList<PcapIf>(); // Will be filled with NICs
    StringBuilder errbuf = new StringBuilder(); // For any error msgs
    int r = Pcap.findAllDevs(alldevs, errbuf);
    if (r != Pcap.OK || alldevs.isEmpty()) {
        System.err.printf("Can't read list of devices, error is %s",
                errbuf.toString());
        return;
    }
    System.out.println("Network devices found:");
    int i = 0;
    for (PcapIf device : alldevs) {
        String description = (device.getDescription() != null) ? device
                .getDescription() : "No description available";
        System.out.printf("#%d: %s [%s]\n", i++, device.getName(),
                description);
    }
    PcapIf device = alldevs.get(0); // Get first device in list
    System.out.printf("\nChoosing '%s' on your behalf:\n",
            (device.getDescription() != null) ? device.getDescription()
                    : device.getName());
    int snaplen = 64 * 1024; // Capture all packets, no trucation
    int flags = Pcap.MODE_PROMISCUOUS; // capture all packets
    int timeout = 10 * 1000; // 10 seconds in millis
    Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf);
    if (pcap == null) {
        System.err.printf("Error while opening device for capture: "
                + errbuf.toString());
        return;
    }
    PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
        public void nextPacket(PcapPacket packet, String user) {
            byte[] data = packet.getByteArray(0, packet.size()); // the package data
            byte[] sIP = new byte[4];
            byte[] dIP = new byte[4];
            Ip4 ip = new Ip4();
            if (packet.hasHeader(ip) == false) {
                return; // Not IP packet
            }
            ip.source(sIP);
            ip.destination(dIP);
            /* Use jNetPcap format utilities */
            String sourceIP = 
     org.jnetpcap.packet.format.FormatUtils.ip(sIP);
                String destinationIP = 
     org.jnetpcap.packet.format.FormatUtils.ip(dIP);

            System.out.println("srcIP=" + sourceIP + 
                    " dstIP=" + destinationIP + 
                    " caplen=" + packet.getCaptureHeader().caplen());
        }
    };
    // capture first 10 packages
    pcap.loop(10, jpacketHandler, "jNetPcap");
    pcap.close();
}
}`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-09 04:36:44

非常简单,他们修改了代码。而不是

ip.source(sIP);ip.destination(dIP);

sIP = ip.source();dIP = ip.destination();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45577542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档