1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
|
===============================================================================
$Id: CHANGELOG,v 1.26 2004/11/09 07:05:06 mike Exp $
LIBNET 1.1 (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
http://www.packetfactory.net/libnet
===============================================================================
- 1.1.6
- Note about why including libnet.h breaks dnet.h/dumbnet.h (Sam Roberts)
- Prepare for 1.1.6-rc3. (Sam Roberts)
- Only use getifaddrs() if it exists. (reported by Dagobert Michelsen) (Sam Roberts)
- Clean up use of single and bracket quotes. (Sam Roberts)
- FreeBSD and Solaris volunteers to contibute. (Sam Roberts)
- ICMPv6 struct is too long, so use length macro (sickmind@lavabit.com) (Sam Roberts)
- ICMPv6 pblock sizes are needed to calculate IPv6's ip_len (reported by sickmind@lavabit.com) (Sam Roberts)
- Prep for 1.1.6 release, such as bumping version (Sam Roberts)
- Add people who have volunteered to check release candidates. (Sam Roberts)
- Rework libnet_autobuild_ipv6() to eliminate code duplication. (Sam Roberts)
- Implemented libnet_autobuild_ipv6() (repolho)
- Implemented unix version of libnet_get_ipaddr6() (repolho)
- Reintroduce libnet_pblock_record_ip_offset() which is empty. (Sam Roberts)
- Make clear that all contributions are under libnet copyright. (Sam Roberts)
- Fix doc comment format errors reported by doxygen. (Sam Roberts)
- Update for doxygen 1.7.4. (Sam Roberts)
- Note that PORTED is no longer maintained. (Sam Roberts)
- Note that CONTRIB is no longer maintained. (Sam Roberts)
- Prep for upcoming 1.1.6 release. (Sam Roberts)
- Remove BUGS, it referred to non-existent code. (Sam Roberts)
- Reworked icmpv6 patch to parallel the form of icmpv4 support. (Sam Roberts)
- Don't depend on netinet/ip.h. (Sam Roberts)
- Remove unused variable. (Sam Roberts)
- Support building ICMPv6 packets. (someone)
- Fixed typo in error message. (Thomas Habets)
- Use SO_BINDTODEVICE to force packets out opened device. (someone)
- Always use an IPPROTO of TCP when calculating TCP checksums. (Sam Roberts)
- Use correct addr type for addrlen calculation. (someone)
- libnet_build_igmp reserved field was mistakenly called 'code' (Sam Roberts)
- Documentation doesn't include any gif files. (Sam Roberts)
- Enable IPV6 support on Solaris 11. (Rich Burridge)
- Trying to fix write errors (Víctor Martínez)
- Presence of linux's PF_PACKET sockets is now detected. The acinclude.m4 merged in from packetfactory's 1.1.3-rc branch mysteriously assumed that that there was no PF_PACKET if the target OS was linux, which is the opposite of what we want. (Sam Roberts)
- Fix libnet_build_igmp() to not reverse the order of the ip address. libnet APIs that take IP addresses as a uint32_t expect them to already be in network byte order. (Sam Roberts)
- pblock_append deals with raw memory and structs, so declare it correctly (Sam Roberts)
- Clarified types and sizes of DHCP/BOOTP chaddr, sname, and file. chaddr is a hardware address, with size specified seperately, whereas sname and file are null terminated strings. (Sam Roberts)
- Explicitly ignore return value of write (some systems now warn about this). (Sam Roberts)
- Synchronize comment about h_len with parameter name in function. (Sam Roberts)
- Fixes a buffer overflow issue when copying chaddr, file, and sname fields to the DHCP header. (allfro)
- Fixes improper calculation of header size when libnet_pblock_probe is called. payload_s must be added to the header length in order to accommodate for the existence of a non-NULL payload. Otherwise the user is prompted with a 'memcpy would cause overflow' error and the program exits. (allfro)
- Fixes incorrect memory block size set in the timeexceed and redirect builders. The n variable does not add the size of the payload (payload_s) for proper allocation of the buffer when payload is not NULL and payload_s is greater than 0. This results in a memcpy buffer overflow error when libnet_pblock_append is called exiting the program. (allfro)
- Fixes a bug that incorrectly converts the addr, mask, and next_hop fields to network byte order. Users will usually call libnet_name2addr4 to fill these fields and this function already provides a network byte-ordered value. (allfro)
- snap parameter was getting copied into the dhost field. (Sam Roberts)
- h_len is no longer used, so pass zero. Coverity noticed that stack garbage was being passed instead of a valid value, its just that the value isn't used, and incluing l->total_size is wrong when the pblock is being updated (though it will work on pblock creation). (Sam Roberts)
- Length n should include the value_hdr. (Sam Roberts)
- Coverity: UNINIT (Jiri Popelka)
- Coverity: REVERSE_INULL (Jiri Popelka)
- Coverity: RESOURCE_LEAK (Jiri Popelka)
- Coverity: OVERRUN_STATIC (Jiri Popelka)
- Coverity: OVERRUN_STATIC (Jiri Popelka)
- Coverity: OVERRUN_STATIC (Jiri Popelka)
- Coverity: FORWARD_NULL (Jiri Popelka)
- Coverity: FORWARD_NULL (Jiri Popelka)
- Coverity: CHECKED_RETURN (Jiri Popelka)
- mkinstalldirs is replaced by autogen.sh. Maybe it shouldn't be checked in? (Sam Roberts)
- autogen retries if /sw/... doesn't exist (Sam Roberts)
- build_ipv6: set higher traffic class bits (Ulrich Weber)
- Fix missing uint instead of u_int (Dagobert Michelsen)
- 1.1.5
- IRIX: Get MAC address from ioctl(), not by spawning shell. (Thomas Habets)
- Compile fix for IRIX (added includes) (Thomas Habets)
- Don't explicitly check for UID 0, we may have capabilities even if not root. (Thomas Habets) (Sam Roberts)
- Cleaned up implementations of libnet_get_hwaddr(), some leaked memory, one returned a pointer to data on the stack, and the others return a pointer to static data. I'm settling on the non-reentrant static data form. (Sam Roberts)
- Visual C++ compiler(v9.0) uses bitfield type as a hint to pad the bitfield, so struct was too long. (Sam Roberts)
- Further simplify autogen.sh (Sam Roberts)
- Removed dependency on net/bpf.h, and on pcap.h. (Sam Roberts)
- LBL_ALIGN check is unused, removing. (Sam Roberts)
- Don't include pcap.h if we've already got net/bpf.h, pcap has it's own bpf. (Sam Roberts)
- Make libnet_get_hwaddr work in the last few releases of OpenBSD (stu@spacehopper.org) (Sam Roberts)
- Get DLT types from the source, <pcap.h>. (Sam Roberts)
- Use autoconf -ivf in autogen.sh (suggested by alon.barlev@gmail.com) (Sam Roberts)
- Don't distribute libnet.h, it is generated by configure (alon.barlev@gmail.com) (Sam Roberts)
- AIX build failures fixed, cause was inclusion of system headers libnet no longer uses (alon.barlev@gmail.com) (Sam Roberts)
- Add a link to the old docs. (Sam Roberts)
- Added links to github and sourceforge. (Sam Roberts)
- Replace C99/C++ comments with traditional C comments. (alon.barlev@gmail.com) (Sam Roberts)
- checksum would segfault if a IP checksum was requested for a non-ipv4 header (Sam Roberts)
- Closer backwards compat, assume its ipv4 if it's not ipv6. This seems totally wrong, but so it goes. (Sam Roberts)
- Try using the ip_len header field to guess the input buffer's size. (Sam Roberts)
- libnet_do_checksum(), despite being "internal", is used by external code. libnet needs to maintain backwards API compatibility, tcpsic from the isic package is an example of a binary failing when calling the new API with the old arguments. (Sam Roberts)
- merged icmpv6 patch in, but I believe either it or the sample/icmp6_unreach generates the cksum incorrectly (victor@inliniac.net) (Sam Roberts)
- Use libtool-1 or libtool-2 whatever available (alon.barlev@gmail.com) (Sam Roberts)
- Avoid looking at /dev and /usr/include when cross-compiling (alon.barlev@gmail.com) Alon: The following code support cross compiling: 1. You CANNOT check for /usr/include stuff as cross compiler is installed else-where. Autoconf know how to do this, use its header detection logic and ask the result. 2. Testing for /dev/ can be done only when not cross compiling... (Sam Roberts)
- Corrected target_os check, it was broke for linuxgnu, and m4 syntax was invalid (alon.barlev@gmail.com) Alon:The following change is needed in order to solve two issues: 1. linuxgnu and such target os. 2. You cannot set variable with space before '=' as it tries to execute the variable... 3. Print result of test in case of linux (Sam Roberts)
- --with-link-layer broken, was using wrong macro name, and didn't include all link types (Sam Roberts)
- ac_cv_c_bigendian is yes, not "big" (alon.barlev@gmail.com) (Sam Roberts)
- Remove dead code. (Sam Roberts)
- h_len is calculated for ip, udp, tcp, icmp, and igmp, so is allowed to be zero. (Sam Roberts)
- libnet_t's fd should be initialized to an invalid value, or libnet_destroy() will close stdin. (Sam Roberts)
- Alon's use of AC_CHECK_HEADERS fails to detect headers. Reverted part of 57acd56f09158decb69f301e7547ce8cde6ac63f (Sam Roberts)
- With link_none, the link apis were failing with not error message. (Sam Roberts)
- man doc makefile wasn't correctly referring to the srcdir (alon.barlev@gmail.com) (Sam Roberts)
- Avoid mallocing zero bytes, it perturbs electric fence. (Sam Roberts)
- autotools patches for cross compiling and seperate builddir (alon.barlev@gmail.com) (Sam Roberts)
- html doc makefile wasn't correctly referring to the srcdir (alon.barlev@gmail.com) (Sam Roberts)
- ip_offset is now calculated on the fly, and UDP and TCP no longer use h_len (Sam Roberts)
- IP offset calculation should allow nesting of IP protocols. (Sam Roberts)
- Remove gccisms in bitfield definitions. (Sam Roberts)
- injection type of LIBNET_NONE, for packet construction without injection (also, more const correctness) (Sam Roberts)
- Notes about checksumming. (Sam Roberts)
- libnet_build_tcp was not returning the ptag. (Sam Roberts)
- Packet boundaries are now passed to _do_checksum(), so it can validate its input. Hopefully, this will end the recurring segmentation faults due to buffer overruns. (Sam Roberts)
- TCP building is triggering memory overwrites; closer examination shows the link list manipulation to be wrong, and the checksumming approach to be incapable of working. I reworked code to simplify and clarify how it works currently, in preparation to fixing it. (Sam Roberts)
- Updated comments and notes. (Sam Roberts)
- Null the pointer in the about-to-be-freed structure, not the one on the stack. (Sam Roberts)
- Added missing pblock types, and made strings consistent with definitions. (Sam Roberts)
- Change version policy, we will be 1.1.4 until 1.1.5 is released. (Sam Roberts)
- Bring CHANGELOG up to date with today, and script used to generated it. (Sam Roberts)
- Begin implementation and tests for repairing pblocks after an update. (Sam Roberts)
- libnet_pblock_insert_before() didn't remove ptag2 from old location (Sam Roberts)
- Clarifications in document comments. (Sam Roberts)
- Don't doxygen process internal header libnet-headers.h (Sam Roberts)
- Declared many constant arguments as const, const-correct code spews warnings when built against libnet. (Sam Roberts)
- Include pcap DLT_ types from correct header, was using an internal one before. (Sam Roberts)
- Declared many constant arguments as const, const-correct code spews warnings when built against libnet. (Sam Roberts)
- Note about build_data, which doesn't update ip_offset, among other problems. (Sam Roberts)
- libnet_clear_packet() wasn't clearing all packet context. (Sam Roberts)
- Why don't TCP and UDP use the DATA pblock type? (Sam Roberts)
- whitespace cleanup (Sam Roberts)
- Add libnet_dll.c as extra, so its there for win32, and build libnet_link.c (Sam Roberts)
- This file wasn't being built, and needed to include bpf to build. (Sam Roberts)
- Forgot to make device a const string here, too. (Sam Roberts)
- make string argument constant (Sam Roberts)
- only ignore Makefile in libnet/ (Sam Roberts)
- Replace u_intX_t with C99 uintX_t. (Thomas Habets)
- pclose() following popen(), not fclose() (Thomas Habets)
- snoof & dlpi: don't free on libnet_link_close() (Thomas Habets)
- Summarize changes for log. (Sam Roberts)
- Reindented, removing hard tabs, and using consistent brace positioning. (Sam Roberts)
- The non-standard types are no longer used. (Sam Roberts)
- /sw/.. path doesn't always exist (Sam Roberts)
- src/libnet_link_snoop.c: Only fclose if f!=NULL (Thomas Habets)
- src/libnet_link_snoop.c: fixed snoop-based backend. Works on IRIX. (Thomas Habets)
- Use uint64_t, not u_int64_t (Thomas Habets)
- define a lying gethostbyname2() if it's not defined (Thomas Habets)
- define STDOUT_FILENO if it's not defined (Thomas Habets)
- configure.in: check for gethostbyname2 (Thomas Habets)
- configure.in: Check for uint{16,32,64}_t (Thomas Habets)
- Configure switch to install samples (Sam Roberts)
- Attempt at applying a patch to get installable samples, which doesn't work. (Sam Roberts)
- Pointers not cleared after free could lead to double deallocation. (Sam Roberts)
- Convert CRLF to LF. (Sam Roberts)
- Auto* changes to work on OS X from git checkout. (Sam Roberts)
- Update autobuild endianness and unaligned checks. (Mike Frysinger) (Sam Roberts)
- Add srcdir to include path. (Sam Roberts)
- Adjust srcdir and builddir so libnet can build out-of-tree (Robin Getz/Mike Frysinger) (Sam Roberts)
- Beginning 1.1.5 development. (Sam Roberts)
- 1.1.4
- Strip CRLF from files not in win32/ (Robert Scheck)
- libnet was using HAVE_CONFIG_H in a public header in order to deal with platform types.
https://bugzilla.redhat.com/show_bug.cgi?id=501633
- Patch to libnet.h.in for compilation on HURD (David Paleino)
- 1.1.3
Merged 1.1.3 release candidate from packet factory, 1.1.2, debian patches, and
my own fixes, including bugs causing memory corruption:
- Fixed various errors, including memory corruption, when IPv4 options are
modified. (Sam Roberts)
- Convert from latin-1 to utf-8, from Robert Scheck. (Sam Roberts)
- Fixed doxygen errors and warnings, and added a deveoper script to prepare
libnet. (Sam Roberts)
- Removed CVS crud, again. (Sam Roberts)
- Applied autotools cleanup patch from Stefanos. (Sam Roberts)
- Applied patch from Stefanos to remove the autotools ephemera that leaked
back in. (Sam Roberts)
- Patches from Stefanos. (Sam Roberts)
- Updated .so revision to be one backwards compatible interface after
1.1.2.1-fork's. (Sam Roberts)
- Fix for debian bug# 418975, IPv6 wasn't updating ip_offset. See
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=418975 and sample
test_ipv6_icmpv4.c for more information, and reproduction. (Sam Roberts)
- merged autogen.sh from 1.1.3, now ltmain.sh comes from autogen.sh (Sam
Roberts)
- 802.1Q and 802.1X header documentation was incorrectly using /** /** is
reserved for doxygen documentation comments, and they didn't have any.
That those packet headers, and no others, were marked that way was
causing man pages to be generated for them, incomplete man pages that
then were being hacked by debian patches 02- and 03-. (Sam Roberts)
- Update .so version to be one src change past the last debian release.
Debian patches to v1.1.2.1 used 4:0:3, in error, so we use 5:0:4, as per
the rules. See Makefile.am comments for reference. (Sam Roberts)
- Bug fixes and reproduction code for ip_offset accounting problem in
libnet_build_ipv4 (Sam Roberts)
- doxygen configuration updated, html seems fine - I don't know about the
man pages. (Sam Roberts)
- autotools merged from v1.1.3 to v1.1.2 (Sam Roberts)
- Remove autotools. And some garbage local files that should not have been
in upstream tarball. (Sam Roberts)
- Removed object files and cvs conflict residue contained in original
package. (Sam Roberts)
- debian patch 06 attempts to free the wrong pointer, and also leaks memory
from the inner loop. (Sam Roberts)
- libnet (inconsistently) uses various signed and/or unsigned typedefs
instead of char ANSI C uses char for string literals and the standard
library, so this generates many warnings. I've fixed a number of the
places where types representing null-terminated strings weren't typed
correctly. (Sam Roberts)
- 09-fix_hurd-i386_build.patch from debian source package See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- 08-fix_libnet_checksum.c.patch from debian source package See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- 07-add_libnet-cq-end-loop.patch from debian source package See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- 06-fix_libnet_pblock_coalesce_leak.patch from debian source package See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- 04-fix_libnet_build_ntp.patch from debian source package See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- 03-fix_libnet_802_1x_hdr.3.patch from debian source package See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- 02-fix_libnet_802_1q_hdr.3.patch See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- 01-fix_libnet-functions.h.3.patch from debian source package See
http://packages.debian.org/source/sid/libnet (Sam Roberts)
- strip CVS subdirectories from upstream package (Sam Roberts)
From 1.1.3-rc:
Added a libnet_version() function
Fixed a bug in libnet_build_ntp() where two arguments werent used due to a
typo
Fixed a bug ln libnet_name2addr4 in which it didnt call hstrerror
Fixed a memory leak in libnet_if_addr.c
Internals: added a payload builder macro
Added an HSRP builder
Fixed the cdp.c sample code
Added AC_PREREQ(2.50) to configure.in to come correct
Added a libnet udp header prototype. We need to add an entire exported
interface for the sole purpose of casting captured packets, this will
presumably be a part of the pcap integration.
Added libnet_adv_write_raw_ipv4()
Fixed the checksum function
Updated the autoconf/automake stuff to be up to date with the latest
versions. We now use libtool.
Fixed a signed/unsigned comparison warning in the LIBNET_DO_PAYLOAD() macro
Changed all empty function prototypes to contain the void keyword
Removed all C++ style comments
Removed the configure.in check for strerror()
Mon Mar 29 09:23:49 PST 2004 1.1.2.1
Fixed a typo in the ICMP patch mentioned below
Thu Mar 25 10:49:04 PST 2004 1.1.2
Fixed the ICMP error message builders (there was a pblock assembly bug
that would prevent you from building more than one ICMP {unreach, time
exceed, redirect} in succession; the order of operations has changed
slightly for building these packets, see the documenation and sample code
Added a Sebek builder
Fixed a bug in libnet_autobuild_arp() that had it pulling in the address to
a pointer instead of just the address
Added AM_MAINTAINER_MODE to configure.in
Changed the __libnet_dump* namespace to the more descriptive libnet_diag*
Added libnet_getpacket_size() to return the size of a packet in a given l
Removed "protocol" from the libnet context. It was a waste of four bytes
The raw socket interface always uses the "IPPROTO_RAW" protocol
Fixed a memory leak in the advanced interface; there is now a function
libnet_adv_free_packet() to free the memory allocated for the packet
when libnet_adv_cull_packet() is called
Fixed a bug on big endian boxes that had TCP and UDP checksums with odd
payloads come out incorrect
Changes all error messages to look and feel the same:
"%s(): foo\n", __func__
Added a bunch of htons/htonl fixes
Continued to add to the doxygen-based documentation
Added support for unconfigured interfaces
Changed the number of interfaces libnet can handle from 32 to 512
Removed uneeded control structure cruft from libnet_link_dlpi.c
Removed sample/ip.c and added sample/ip_link.c and sample/ip_raw.c
Added IPv6 fragmentation header builder
Added IPv6 routing information header builder
Added IPv6 destination options header builder
Fixed IPv6 flowlabel and traffic class bitwise math
Tue Nov 25 15:33:27 PST 2003 1.1.1
Fixed a bug in libnet_build_icmp_redirect: htonl(gateway) --> gateway.
Added icmp_redirect.c sample code.
Added libnet_autobuild_arp().
Added a slightly faster checksum.
Added a GRE builder.
Fixed a buffer overflow in libnet_build_dhcp().
Added more sanity checks to ensure we have proper link or network layer
headers when not in advanced mode.
Fixed a bug that would sometimes make __libnet_dump_context() crash under
linux.
Migration from sprintf and strcpy snprintf and strncpy.
Fixed bug in libnet_build_ipv4() when calculating size of memory block
Removed the support directory -- if you're an OLD version of OpenBSD or
FreeBSD you deserve what you get.
Added a BGP builder.
Changed the error handing functions to be more consistent and use
__FUNCTION__.
Fixed a bug in libnet_pblock_free() -- replaced it with
libnet_pblock_delete().
Fixed all of the inconsistencies inside all of the builders and pblock code
where some fringe conditions could result in u_longs being crunched into
u_shorts.
Fixed libnet_pblock_coalesce() to only require one pass through the list.
Added better diagnostics (__libnet_dump_context(), __libnet_dump_pblock()).
Added Token Ring and FDDI builders (Linux and Solaris only).
Added Token Ring and FDDI sample programs.
Fixed the handling of TCP and IP payloads when reusing a pblocks.
Fixed the handling of IP headers such that if a TCP packet changes size
via subsequent calls to libnet_build_tcp(), the IP header automatically
changes size as well.
Added libnet_pblock_delete() to remove a pblock from the list.
Added ip.c sample program (builds an arbitrary IP packet).
Added additional payload sanity checks to libnet_build_*.
Added a payload to sample/icmp_echo_cq.c.
Added an MPLS builder.
Added an 802.1x builder.
Added an RPC builder! Bout time eh?
Fixed do1x.c sample code to make the frame valid.
Fixed link-interface semantics under Mac/OSX
Changed libnet_stats to all be unsigned long longs to accomodate all of
hardcore packet writers.
Fixed IPv6 support (to some extent) removed the IP_HDRINCL stuff and
reworked the resolver stuff to use net_pton() and inet_ntop().
Fixed libnet_build_icmpv4_*() to properly handle the IP header in the
payload.
Fixed libnet_build_igmp() to handle checksums properly.
Fixed a bug in libnet_build_dnsv4() -- now it will work for TCP or UDP --
see the sample program for details...
Fixed a bug in sample/dhcp_discover.c
Added multiple packet interface (called the context queue interface).
Until I finish the manpage, see the sample code and README files
for instructions on how it works.
Fixed Cygwin support.
Fixed an OS/X compilation error due to lack of system header files.
Fixed OS/X link layer bug.
Fixed a bug in pblock_coalesce() that resulted in bad checksums when the
advanced mode was enabled.
Fixed a potential memory leak in pblock_coalesce().
Fixed a potential memory leak in libnet_select_device().
Fixed a potential memory leak in libnet_plist_chain_new().
Fixed Solaris support for IPv6 address support.
Fixed minor bugs in libnet_advanced.c.
Added loopback device support.
Mon Aug 5 15:18:52 PDT 2002 1.1.0
First 1.1.0 non-beta release.
Added libnet_adv_write_link() which allows an advanced user to access
libnet's low-level frame injection functionality directly.
Wed Jul 10 08:18:15 PDT 2002 1.1.0 Beta 07b
Added some words to the manpage.
Fixed a typo in libnet-functions.h -- forgot a comma.
Sun Jul 7 10:37:12 PDT 2002 1.1.0 Beta 07a
My bad. Forgot to `make distclean` before last release resulting in some
compilation errors.
My bad. Forgot to add advanced *_ADV writing support to libnet_write().
Simple fix.
Tue Jul 2 08:42:57 PDT 2002 1.1.0 Beta 07
BETA support for IPv6.
Fixed the IP and TCP options bugs that bound the TCP and IP payloads to
the IP and TCP headers respectively and saw options being appended
after the payload.
Added libnet_hex_aton(). This functions reads in arbirtrarily long hex
strings from the command line and returns the equivalent byte string. It
does an implicit malloc() so make sure to free().
Frédéric Raynal submitted a patch to break the coalesce loop down to two
passes using realloc resulting in a modest performance increase! Cool!
Added "Advanced Mode" which will initialize the library with additional
functionality for advanced users who "know what they're doing". Basically
this feature will remove some of the sanity checks libnet does when
building and injecting packets, at the programmer's peril. It also exposes
the libnet_adv() functions.
FINALLY changed that irritating struct ether_addr redefintion problem.
I internalized the name space of it (-> libnet_ether_addr) so there will
be no more issues there. Please update your code accordingly!
Added IGMP checksum support which was omitted by accident.
Removed netinet/ip_icmp.h from include list. This was causing problems
when including dnet.h which includes other system headers. We can
probably stand to remove several headers from libnet.h.in.
Added sanity check to ensure that when *build_ethernet() is called the
injection method is LIBNET_LINK (except when advanced mode is on).
Thu Mar 28 22:18:46 PST 2002 1.1.0 Beta 06
Fixed ICMP unreachable checksum error and payload issues. Now using the
payload interface with unreachables will append the payload to the IPv4
header of the "offending packet".
Split STP builder into two; libnet_build_stp_conf() and
libnet_build_stp_tcn().
New CHANGELOG format. :)
Mar 24 2002 1.1.0 Beta 05
New building logic. Top down. Much smarter, we now build packets and
frames like an OS kernel.
Added Cisco ISL builder.
Mar 18 2002 1.1.0 Beta 04
Added an STP builder.
Hooks for Cisco ISL builder.
Changed libnet_init() to now accept an IP address for the device (so
either "fxp0" or "192.168.0.1" will work).
Added libnet_clear_packet() to free packet memory when we're done with it.
Feb 28 2002 1.1.0 Beta 03
Added 802.1q, 802.2, 802.3 builders.
Feb 25 2002 1.1.0 Beta 02
Fixed Cygwin support.
Feb 01 2002 1.1.0 Beta 01
Complete new API and overhaul of most everything.
Improved linux packet socket support.
Renamed libnet_host_lookup() and libnet_name_resolve() to the more
intuitive libnet_addr2name() and libnet_name2addr().
All of the address resolution functions return host byte order (which
is what the build functions want).
Removed a ton of code from every corner of libnet.
Removed alot of useless crap:
misc directory
ports directory
util directory
cleaned out the test directory and moved it to sample
The libnet-config script is no longer needed to specify machine
endianess -- that has been moved to libnet.h and done at compile time.
You can still use it to specify other CPP constants as well as
libraries.
Added cygwin support.
Hooks for a few ieee 802 builders.
Added NTP builder.
Added DHCP builder.
Added BOOTP builder.
Added Cisco CDP builder (needs work).
Added IPSEC builder (needs work).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1.0.2a 02.06.2001 Oops! Messed up the install stuff. Fixed now.
Fixed the config.sub to correctly look for arm*
architecture.
Fixed the test.sh script
(Thankz again to syke).
1.0.2 02.03.2001 Added OpenBSD 2.7 etherspoof lkm and kernel patch.
(Thankz to obecian).
Added FreeBSD 4.0-STABLE (and 5.0-CURRENT?)
etherspoof kernel patch.
(Thankz to Matt Bing).
Added FreeBSD 4 support for automagic MAC address
spoofing (via ioctl). No more lkm!
(Thankz to Toni Andjelkovic).
Added VRRP support.
Fixed a NULL pointer check in libnet_checksum.c.
(Thankz to syke).
Fixed a function naming problem in libnet_if_addr.c.
(Thankz to gigisull).
Fixed a potential byte error in libnet_version.
(Thankz to wotan).
Fixed a potential overflow in
libnet_link_sockpacket.c and libnet_link_dlpi.c.
(Thankz to Jarno Huuskonen).
Fixed a manpage discrepancy (get_ip_addr returns
host-byte, not network-byte).
Fixed arena allocation code (misalignments and
whatnot) and arena manpage entry (2 arguments
were swapped).
(Thankz to Bryan T. Schmersal).
Fixed datatype discrepancies (u_char was used
liberally when char should have been used).
(Thankz to Kyle Hargraves).
Fixed the PF_PACKET interface to work correctly.
(Thankz to Smiler).
1.0.1b 04.07.2000 Fixed portlist chaining code to allow for more than
one active plist chain at a time (as per twitch's
patch).
Fixed discrepancy between the manpage and code for
libnet_close_link_interface. It now returns 1 on
success as per libnet standard (thankz to Toni
Andjelkovic for pointing this out).
1.0.1a 03.29.2000 Fixed a small bug in libnet_link_dlpi.c.
1.0.1 12.19.1999 Fixed a typo in libnet-headers.h ARH_H -> ARP_H.
Fixed a small typo in ether_mod-2.5.c.
Pre-happy BD to libnet! She'z almost 2 yearz old!
1.0.0 10.27.1999 Added verbose html documentation.
Added verbosely commented example code.
Fixed OSPF testcode compile issues.
Added ping of death ICMP test code module.
Fixed manpage installation wrongness.
Fixed a reported bug in OpenBSD etherspoof lkm.
Merged OSPF lsa checksum code into main checksum
module.
Fixed a reported bug in the Makefile.in under
Solaris when make install was invoked, the ln
failed.
Fixed linux-based IP broadcasting using the
raw sockets interface.
0.99g 09.13.1999 Added an OSPF builder (which is still in beta).
Fixed the Linux/configure.in bug. This was an odd
bug that affected Linux-based boxes, but not
BSD-based machines. The configure script refused
to expand most of the Makefile.in macros in every file
because of a conditional check.
Fixed some Makefile.in issues.
0.99f 09.09.1999 Changed test/poink.c to not rely on a previous
install of libnet to compile.
Added a redhat RPM.
Changed sourcefile naming scheme to libnet_*.
Removed all assertions from the tree.
We are moving closer to a 1.0 release and
assertions have no place in production code.
Furthermore, there should be no exit points
inside a library. Currently, all functions that
made assertions now return an integral 1 upon
success and a -1 when the assertion would have
failed (some had to be changed from returning
void to returning int). This will not break
backward compatbility.
Fixed bugs in the arena code.
next_packet_from_arena would never return the
first chunk of memory, only the "next". It
now handles this special case. Thanks to
Sascha Gresk for locating this bug.
Fixed another potential bug when attempting
to allocate large packet sizes inside an arena.
Added an OpenBSD 2.5 ether_spoof lkm.
Fixed TCP options bugs.
0.99e 07.21.1999 Modified the libnet-config script to work more
intutively now. It accepts multiple arguments.
See README.libnet-config.
Solaris m4/sh fixes (autoconf phase).
Internal error handling changed to use libnet_error.
0.99d 06.24.1999 Added: build_icmp_redirect().
Added: FreeBSD 3.x support for spoofing source.
Added: libnet_error().
Added: port list chaining code.
MAC addrresses (see README.bpf).
Bugfix: libnet_select_device correctly accepts
NULL device arguments.
Bugfix: build_icmp.c now copies the correct amount
of header information.
Bugfix: OpenBSD needs HAVE_SOCKADDR_SA_LEN.
Changed: write_ip internal semantics. Cleaner
and faster now.
Changed: init_packet argument parameters. More
correct now. Takes a u_short vs. a size_t.
0.99c 05.28.1999 link_int -> libnet_link_int.
Misc small testcode fixes.
Added libnet_tcp_header and libnet_ip_header.
Added libnet-config shell script, see
README.libnet-config and the manpage.
Updated ports.
Revamped checksum module -- it's much simpler
and more efficient (ripped out arch specific
code which seemed to be buggy with series' of
very large packets). Dug Song wrote it, with
small fixes/changes by MDS.
0.99b 05.06.1999 Fixed a nasty UDP/TCP + data checksum bug.
Header structure further divided into subfiles.
Moved get_hwaddr into low-level interface locales.
Fixed the BSD get_hwaddr (dugsong@anzen.com).
Ported to BSD/OS 3.x.
Added `LIBNET_VERSION` symbolic constant.
build_ip with payload semantics changed (now
requires a payload length which is more
intuitive).
Fixed the `disappearing MAC address problem`
within the linux version of get_hwaddr().
0.99a 04.14.1999 Linux 2.0.x kernels don't have <net/ethernet.h>
0.99 included this header file without checking
to see if it present. This is now fixed.
Non-x86 systems have no tcp_check function but the
stub.c sourcefile did not check this. This is now
fixed.
Added the utilities directory and get_mac.c.
0.99 04.13.1999 Major manpage redux.
Added (broken?) PF_PACKET support for Linux (see
README.linux).
Moved alot of m4 from configure.in to aclocal.m4.
Added Linux m4 macro to detect PF_PACKET.
Added build_icmp_unreach
Added build_icmp_timestamp
Added standard nomenclature for all the ICMP
type/code symbolic constants (see the manpage).
Changed internal network structure nomenclature.
Decided to stop using the word nomenclature so much.
Fixed semantics of get_ipaddr (s/PF_INET/AF_INET).
Added a symlink in the install directory so libnet
is also named `libpwrite`.
Added ASN.1 conversion routines, mostly pilfered
from ucd snmplib.
Removed get_hwaddr from sockpacket.c and made the
existing one portable to Linux.
Added more testcode and changed testcode structure
to be more intuitive.
Added init_packet and destroy_packet.
Added an arena allocator.
Fixed alignment issues on SPARC and Alpha
(possibly others with strict alignment
requirements).
Added a packet dumping routine. Not fully tested.
Testcode updates including a master testcode shell
script.
Added stub functions to ease the eventual
transition to a more proper `libnet_*` function
naming convention. See README.stubs for more
info.
0.10a 02.04.1999 Added the libnet.s2h configuration file to the
distribution.
GLIBC fix.
0.10 01.31.1999 Many low-level changes, same interface though.
Split up the main libnet.h file into two files.
Autoconf changes:
checks to see if the underlying architecture
needs to be aligned.
flexible install location.
explicitly set $CC option in Makefile.in.
Added ensure-dir.sh.
Changes DEBUG semantics as I was told the previous
stuff broke on some compilers.
Created a FreeBSD/OpenBSD ports entry.
SGI snoop (drain) interface fixed.
Solaris/HPUX DLPI interface fixed.
Support for getting local IP addresses.
Support for getting local hardware addresses.
Added a DNS packet builder.
Added an RIP packet builder.
Added an ICMP MASKREQ/REPLY packet builder.
Added ICMP at the link layer test code.
Changed GLIBC version detection semantics.
0.9 12.15.1998 Major changes/additions here...
Added lowlevel packet building and writing
routines with a codebase from libpcap.
Broken DPLI support (fixme!).
Added ethernet and ARP building routines.
Added ICMP_ECHO building routine which led to the
Discovery of an odd kernel panic bug under
OpenBSD (see hook.c in test dir).
Added IGMP building routine.
Reworked autoconf script.
Fixed Linux ip_sum vs. ip_csum naming issue.
Fixed Solaris checksums (2.4, 2.5.x).
Added NetBSD autoconf entry.
Changed BSD_BYTE_SWAP semantics to correctly handle
IP datagrams through BPF (see write_ip.c).
0.8c 11.10.1998 Added more testcode.
0.8b 10.21.1998 OK. I THINK WE'VE FINALLY FIXED THAT GLIBC THING.
Ported to alpha Linux.
0.8a 10.15.1998 Added support for IP TOS bits (oops. Broke
backward compatibility again. Like I said, don't
rely on this until 1.x).
0.8 10.13.1998 Added support for IP options.
Added support for TCP options.
Added a dummy version function.
Fixed linux libc vs. glibc nomenclature discrepancy.
Solaris checksums fixed for non-payload laden
packets?
0.7b 09.22.1998 Linux glibc/libc nomenclature anomoly still there.
Fixed Linux/BSD icmp header size problem.
0.7a 08.26.1998 Fixed payload support (see test code).
0.7 08.25.1998 Solaris port (checksums broken -- Solaris has gay
fucking quirks when it comes to checksumming on
raw sockets).
Added autoconf scripts.
Added psuedorandom number generation code.
Added payload support (breaks backward
compatability and is untested).
0.6 06.21.1998 Fixed UDP checksum. Removed USE_NAME CPP option
made it a run time decision. Makes code more
extensible, but breaks backward compatibility.
0.5 06.02.1998 Added TCP/UDP/IP packet assembly routines.
Added a checksum function.
Added a manpage.
Removed daemonizing function (BSD has one).
UDP checksums broken...
0.4 01.12.1998 IP checksum (x86 assembly implementation).
0.3 01.12.1998 daemonizing function.
0.2 01.11.1998 raw socket function changed to allow user
designated protocol for raw socket
0.1 01.05.1998 Initial release, contains:
network byte order -> human readable IP address,
human readable IP address -> network byte order,
simple raw socket / IP_HDRINCL wrapper,
TCP checksum (x86 assembly implementation)
EOF
|