Jnetpcap UDP重新计算校验和
我试图在更改IPD目的地的数据包上重新计算UDP校验和,但UDP校验和函数似乎不接受任何参数,我使用的是jnetpcap 1.4Jnetpcap UDP重新计算校验和,udp,jnetpcap,Udp,Jnetpcap,我试图在更改IPD目的地的数据包上重新计算UDP校验和,但UDP校验和函数似乎不接受任何参数,我使用的是jnetpcap 1.4 Pcap pcap_off = Pcap.openOffline(fileName, errorBuf); //open pcap PcapPacket temp= new PcapPacket(JMemory.Type.POINTER); pcap_off.nextEx(temp);
Pcap pcap_off = Pcap.openOffline(fileName, errorBuf); //open pcap
PcapPacket temp= new PcapPacket(JMemory.Type.POINTER);
pcap_off.nextEx(temp);
//System.out.print(temp);
JBuffer buff=new JBuffer(temp.size()); //new buffer
Ethernet eth=temp.getHeader(new Ethernet());
Ip4 ip=temp.getHeader(new Ip4());
Udp udp=temp.getHeader(new Udp());
Payload data=temp.getHeader(new Payload());
InetAddress dst = InetAddress.getByName("10.0.0.10");
InetAddress src = InetAddress.getByName("10.0.0.10");
ip.destination(dst.getAddress()); //modify ip dst
ip.checksum(ip.calculateChecksum()); // recalculate ip checksum OK !!!
eth.transferTo(buff);
ip.transferTo(buff, 0, ip.size(), eth.size());
有人可以帮助我获得有关UDP中校验和字段的位置和格式的信息,我可以尝试根据重新计算的值手动写入正确的字段。谢谢 至少有三种不同的JPcap实现。您不需要指定您使用的是哪一个,即问题A,但是如果它的
checksum()
方法不接受参数,即它是一个getter而不是setter,很难看到任何人可以对它做些什么。感谢您的回答,我在“jnetpcap-src-1.3.0-1”文档中读到checksum()是一个setter方法,但我使用的是1.4.b0004版本,其解决方式如下:int cs=udp.calculateChecksum();udp.setUShort(6,cs);
udp.checksum(udp.calculateChecksum()); // NOT OK
udp.transferTo(buff, 0, udp.size(), eth.size() + ip.size());
data.transferTo(buff, 0, data.size(), eth.size() + ip.size()+ udp.size());
JPacket packet =new JMemoryPacket(JProtocol.ETHERNET_ID,buff); //new packet to send