In code of decode-ipv4.c/DecodeIPv4 function:<br><br> /* If a fragment, pass off for re-assembly. */<br> if (unlikely(IPV4_GET_IPOFFSET(p) > 0 || IPV4_GET_MF(p) == 1)) {<br> Packet *rp = Defrag(tv, dtv, NULL, p);<br>
if (rp != NULL) {<br> /* Got re-assembled packet, re-run through decoder. */<br> DecodeIPV4(tv, dtv, rp, (void *)rp->ip4h, IPV4_GET_IPLEN(rp), pq);<br> PacketEnqueue(pq, rp);<br>
}<br>/*added by iswalker*/<br> if (IPV4_GET_IPOFFSET(p) ==0 &&IPV4_GET_MF(p) == 1 &&IPV4_GET_IPPROTO(p)==IPPROTO_UDP ) {<br> DecodeUDP(tv, dtv, p, pkt + IPV4_GET_HLEN(p),<br>
IPV4_GET_IPLEN(p) - IPV4_GET_HLEN(p), pq);<br> }<br>/*end*/<br> return;<br> }<br>Problem:if the packet is an udp ,and the packet is the first fragment(offset ===0 and MF is 1),the ip_payload contain the compete udp header,which we should decode complete,or we will not define some signature including fragment info and udp header info.<br>