As you read in the RFC's, UDP checksums are completely optional and 0 is valid. TCP requires a valid checksum at all times and so there isn't a hack like that available. The semi-good news is that as of 3.5.0, tcprewrite won't re-calculate an UDP checksum when it is 0. As you figured out though, it was a small change to force all UDP checksums to be 0.
Sadly, I doubt tcprewrite will ever support calculating checksums spanning fragmented frames (TCP, UDP, etc) because tcprewrite can only look at/process one packet at a time. On Wed, Dec 12, 2012 at 4:28 PM, Peter Valdemar Mørch <pe...@morch.com> wrote: > Hardcoding 0 for the UDP check sum does work, but isn't really a stable > solution! :-) > > Peter > >> diff -u tcpreplay_3.4.3.orig/tcpreplay-3.4.3/src/tcpedit/checksum.c >> tcpreplay-3.4.3/src/tcpedit/checksum.c > --- tcpreplay_3.4.3.orig/tcpreplay-3.4.3/src/tcpedit/checksum.c > 2009-06-25 20:45:51.000000000 +0200 > +++ tcpreplay-3.4.3/src/tcpedit/checksum.c 2012-12-13 00:15:51.011434872 > +0100 > @@ -116,6 +116,7 @@ > sum += ntohs(IPPROTO_UDP + len); > sum += do_checksum_math((u_int16_t *)udp, len); > udp->uh_sum = CHECKSUM_CARRY(sum); > + udp->uh_sum = 0; > break; > > case IPPROTO_ICMP: > > > (This is on another server running 3.4.3...) > > > > On Wed, Dec 12, 2012 at 11:59 PM, Peter Valdemar Mørch <pe...@morch.com> > wrote: >> >> Hi, >> >> I have a capture file with two ethernet frames, each containing a fragment >> of a UDP packet. When I use tcprewrite to change the destination MAC and IP >> along the lines of: >> >> tcprewrite --enet-dmac 00:0c:29:c8:56:0c -D >> 172.27.189.10/32:172.22.216.102/32 -i input.pcap -o output.pcap -C >> >> The calculated UDP checksum seems wrong however. The recipient linux >> discards the entire UDP packet. (I'm guessing the UDP checksum gets >> calculated over the first frame only, not the entire UDP packet - I don't >> know) >> >> Now, in http://sourceforge.net/mailarchive/message.php?msg_id=22945996, >> Aaron Turner writes: >>> >>> Yeah, unfortunately, tcprewrite doesn't know how to do IP >>> defragmentation to calculate the UDP checksum which spans multiple >>> fragments.<snip> >> >> >> Although this is from 2009, it seems to be my problem. Is that right? >> >> When I set the UDP checksum to 0x0000 with a hex editor the recipient >> *does* get it. I didn't quite understand the legaleze, but it seems UDP >> checksumming is somewhat optional. See e.g. "4.1.3.4 UDP Checksums" in RFC >> 1122. >> >> We would really like to replay our large capture file with some large >> fragmented SNMP traps towards another IP address. :-( >> >> The linux TCP stack delivers UDP SNMP traps with 0x0000 UDP checksums to >> snmptrapd, which is all we need. A flag to force 0x0000 UDP checksums as a >> workaround would save the day for us. >> >> Is there anything else I can try? >> >> Alternatively, some mention of this limitation in the man page would be >> nice. Does this limitation also apply to TCP checksums (that aren't >> optional?) >> >> Sincerely, >> >> Peter >> >> > tcprewrite -V >> tcprewrite version: 3.4.4 (build 2450) (debug) >> Copyright 2000-2010 by Aaron Turner <aturner at synfin dot net> >> Cache file supported: 04 >> Not compiled with libdnet. >> Compiled against libpcap: 1.3.0 >> 64 bit packet counters: enabled >> Verbose printing via tcpdump: enabled >> Fragroute engine: disabled -- Aaron Turner http://synfin.net/ Twitter: @synfinatic http://tcpreplay.synfin.net/ - Pcap editing and replay tools for Unix & Windows Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. -- Benjamin Franklin "carpe diem quam minimum credula postero" ------------------------------------------------------------------------------ LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial Remotely access PCs and mobile devices and provide instant support Improve your efficiency, and focus on delivering more value-add services Discover what IT Professionals Know. Rescue delivers http://p.sf.net/sfu/logmein_12329d2d _______________________________________________ Tcpreplay-users mailing list Tcpreplay-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tcpreplay-users Support Information: http://tcpreplay.synfin.net/trac/wiki/Support