java ipv6抓包_从IPv6数据包中获取ICMPv6头

嗨,我坚持从IPv6数据包中获取ICMPv6头 .

size = sizeof(sockaddr_in6);

if ((lenght = recvfrom(socd, buffer, BUFSIZE, 0, (sockaddr *)&receiveSockAddr, &size)) < 0) {

cerr << "recvfrom error" << endl;

}

ip = (ip6_hdr *) buffer;

cout << "Payload length: " << ip->ip6_ctlun.ip6_un1.ip6_un1_plen << endl;

cout << "Payload length ntohs: " << ntohs(ip->ip6_ctlun.ip6_un1.ip6_un1_plen) << endl;

//icmpRec = (icmp6_hdr *) (buffer + ???offset???);

我需要找出如何设置偏移量 . 我知道的唯一方法是获得有效载荷长度,然后是: packet length - payload length = my offset . 但是 ip->ip6_ctlun.ip6_un1.ip6_un1_plen 是一些奇怪的数字 .

从上面的代码收到:

Payload length: 25332

Payload length ntohs: 62562

将ICMP6_ECHO_REQUEST发送到ipv6.google.com后

但是,如果我查看wireshark,Payload长度是8个字节 . 如何正确解码 uint16_t 中的有效负载编号以更正十进制数 8 ?如何获得IPv6数据包的整体大小来计算偏移?为什么IPv6没有IHL作为IPv4?这让IPv6的工作变得非常复杂 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值