libnet4r 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +15 -0
- data/LICENSE +28 -0
- data/README +187 -0
- data/Rakefile +110 -0
- data/ext/extconf.rb +60 -0
- data/ext/libnet.c +705 -0
- data/ext/libnet_arp.c +152 -0
- data/ext/libnet_ethernet.c +115 -0
- data/ext/libnet_ipv4.c +140 -0
- data/ext/libnet_ipv6.c +138 -0
- data/ext/libnet_udp.c +112 -0
- data/ext/libnet_vlan.c +131 -0
- data/lib/libnet4r/header.rb +609 -0
- data/lib/libnet4r/helpers.rb +19 -0
- data/lib/libnet4r/libnet.rb +39 -0
- data/libnet/CVS/Entries +24 -0
- data/libnet/CVS/Repository +1 -0
- data/libnet/CVS/Root +1 -0
- data/libnet/Makefile.am +15 -0
- data/libnet/Makefile.am.common +10 -0
- data/libnet/Makefile.in +443 -0
- data/libnet/README +21 -0
- data/libnet/VERSION +1 -0
- data/libnet/acconfig.h +36 -0
- data/libnet/acinclude.m4 +463 -0
- data/libnet/aclocal.m4 +1337 -0
- data/libnet/autom4te.cache/CVS/Entries +1 -0
- data/libnet/autom4te.cache/CVS/Repository +1 -0
- data/libnet/autom4te.cache/CVS/Root +1 -0
- data/libnet/autom4te.cache/output.0 +6225 -0
- data/libnet/autom4te.cache/requests +111 -0
- data/libnet/autom4te.cache/traces.0 +272 -0
- data/libnet/config.guess +1314 -0
- data/libnet/config.sub +1410 -0
- data/libnet/configure +6225 -0
- data/libnet/configure.in +235 -0
- data/libnet/doc/BUGS +19 -0
- data/libnet/doc/CHANGELOG +527 -0
- data/libnet/doc/CONTRIB +53 -0
- data/libnet/doc/COPYING +31 -0
- data/libnet/doc/CVS/Entries +12 -0
- data/libnet/doc/CVS/Repository +1 -0
- data/libnet/doc/CVS/Root +1 -0
- data/libnet/doc/DESIGN_NOTES +134 -0
- data/libnet/doc/MIGRATION +172 -0
- data/libnet/doc/PACKET_BUILDING +161 -0
- data/libnet/doc/PORTED +45 -0
- data/libnet/doc/RAWSOCKET_NON_SEQUITUR +41 -0
- data/libnet/doc/TODO +96 -0
- data/libnet/doc/html/acconfig_8h-source.html +49 -0
- data/libnet/doc/html/annotated.html +17 -0
- data/libnet/doc/html/bpf_8h-source.html +277 -0
- data/libnet/doc/html/config_8h-source.html +125 -0
- data/libnet/doc/html/doxygen.css +169 -0
- data/libnet/doc/html/doxygen.png +0 -0
- data/libnet/doc/html/files.html +29 -0
- data/libnet/doc/html/functions.html +26 -0
- data/libnet/doc/html/functions_vars.html +26 -0
- data/libnet/doc/html/getopt_8h-source.html +97 -0
- data/libnet/doc/html/globals.html +219 -0
- data/libnet/doc/html/globals_defs.html +104 -0
- data/libnet/doc/html/globals_func.html +136 -0
- data/libnet/doc/html/gnuc_8h-source.html +56 -0
- data/libnet/doc/html/graph_legend.dot +22 -0
- data/libnet/doc/html/graph_legend.html +75 -0
- data/libnet/doc/html/ifaddrlist_8h-source.html +65 -0
- data/libnet/doc/html/in__systm_8h-source.html +90 -0
- data/libnet/doc/html/index.html +17 -0
- data/libnet/doc/html/libnet-asn1_8h-source.html +268 -0
- data/libnet/doc/html/libnet-functions_8h-source.html +742 -0
- data/libnet/doc/html/libnet-functions_8h.html +8844 -0
- data/libnet/doc/html/libnet-headers_8h-source.html +1655 -0
- data/libnet/doc/html/libnet-headers_8h.html +3053 -0
- data/libnet/doc/html/libnet-macros_8h-source.html +161 -0
- data/libnet/doc/html/libnet-macros_8h.html +358 -0
- data/libnet/doc/html/libnet-structures_8h-source.html +233 -0
- data/libnet/doc/html/libnet-types_8h-source.html +58 -0
- data/libnet/doc/html/libnet_8h-source.html +119 -0
- data/libnet/doc/html/libnet_8h.html +24 -0
- data/libnet/doc/html/structlibnet__802__1q__hdr.html +145 -0
- data/libnet/doc/html/structlibnet__802__1x__hdr.html +97 -0
- data/libnet/doc/libnet.doxygen.conf +1102 -0
- data/libnet/doc/man/CVS/Entries +1 -0
- data/libnet/doc/man/CVS/Repository +1 -0
- data/libnet/doc/man/CVS/Root +1 -0
- data/libnet/doc/man/man3/libnet-functions.h.3 +3136 -0
- data/libnet/doc/man/man3/libnet-headers.h.3 +1872 -0
- data/libnet/doc/man/man3/libnet-macros.h.3 +172 -0
- data/libnet/doc/man/man3/libnet.h.3 +17 -0
- data/libnet/doc/man/man3/libnet_802_1q_hdr.3 +53 -0
- data/libnet/doc/man/man3/libnet_802_1x_hdr.3 +41 -0
- data/libnet/include/CVS/Entries +10 -0
- data/libnet/include/CVS/Repository +1 -0
- data/libnet/include/CVS/Root +1 -0
- data/libnet/include/Makefile.am +7 -0
- data/libnet/include/Makefile.in +395 -0
- data/libnet/include/bpf.h +264 -0
- data/libnet/include/config.h.in +118 -0
- data/libnet/include/gnuc.h +43 -0
- data/libnet/include/ifaddrlist.h +52 -0
- data/libnet/include/libnet/CVS/Entries +9 -0
- data/libnet/include/libnet/CVS/Repository +1 -0
- data/libnet/include/libnet/CVS/Root +1 -0
- data/libnet/include/libnet/Makefile.am +12 -0
- data/libnet/include/libnet/Makefile.in +294 -0
- data/libnet/include/libnet/libnet-asn1.h +255 -0
- data/libnet/include/libnet/libnet-functions.h +2157 -0
- data/libnet/include/libnet/libnet-headers.h +1662 -0
- data/libnet/include/libnet/libnet-macros.h +186 -0
- data/libnet/include/libnet/libnet-structures.h +222 -0
- data/libnet/include/libnet/libnet-types.h +45 -0
- data/libnet/include/libnet.h.in +132 -0
- data/libnet/include/stamp-h.in +1 -0
- data/libnet/include/win32/CVS/Entries +5 -0
- data/libnet/include/win32/CVS/Repository +1 -0
- data/libnet/include/win32/CVS/Root +1 -0
- data/libnet/include/win32/config.h +112 -0
- data/libnet/include/win32/getopt.h +84 -0
- data/libnet/include/win32/in_systm.h +77 -0
- data/libnet/include/win32/libnet.h +106 -0
- data/libnet/install-sh +250 -0
- data/libnet/libnet-config.in +62 -0
- data/libnet/libnet.doxygen.conf +1102 -0
- data/libnet/man/CVS/Entries +1 -0
- data/libnet/man/CVS/Repository +1 -0
- data/libnet/man/CVS/Root +1 -0
- data/libnet/missing +283 -0
- data/libnet/mkinstalldirs +40 -0
- data/libnet/sample/CVS/Entries +47 -0
- data/libnet/sample/CVS/Repository +1 -0
- data/libnet/sample/CVS/Root +1 -0
- data/libnet/sample/Makefile.am +63 -0
- data/libnet/sample/Makefile.in +729 -0
- data/libnet/sample/arp-new.c +144 -0
- data/libnet/sample/arp.c +151 -0
- data/libnet/sample/bgp4_hdr.c +225 -0
- data/libnet/sample/bgp4_notification.c +242 -0
- data/libnet/sample/bgp4_open.c +266 -0
- data/libnet/sample/bgp4_update.c +337 -0
- data/libnet/sample/cdp.c +187 -0
- data/libnet/sample/dhcp_discover.c +257 -0
- data/libnet/sample/dns.c +260 -0
- data/libnet/sample/dot1x.c +113 -0
- data/libnet/sample/fddi_tcp1.c +213 -0
- data/libnet/sample/fddi_tcp2.c +209 -0
- data/libnet/sample/get_addr.c +112 -0
- data/libnet/sample/gre.c +410 -0
- data/libnet/sample/icmp6_echoreq.c +184 -0
- data/libnet/sample/icmp_echo_cq.c +201 -0
- data/libnet/sample/icmp_redirect.c +200 -0
- data/libnet/sample/icmp_timeexceed.c +190 -0
- data/libnet/sample/icmp_timestamp.c +157 -0
- data/libnet/sample/icmp_unreach.c +204 -0
- data/libnet/sample/ieee.c +177 -0
- data/libnet/sample/ip_link.c +201 -0
- data/libnet/sample/ip_raw.c +180 -0
- data/libnet/sample/isl.c +167 -0
- data/libnet/sample/libnet_test.h +60 -0
- data/libnet/sample/mpls.c +251 -0
- data/libnet/sample/ntp.c +193 -0
- data/libnet/sample/ospf_hello.c +179 -0
- data/libnet/sample/ospf_lsa.c +190 -0
- data/libnet/sample/ping_of_death.c +171 -0
- data/libnet/sample/rpc_tcp.c +214 -0
- data/libnet/sample/rpc_udp.c +213 -0
- data/libnet/sample/sebek.c +299 -0
- data/libnet/sample/smurf.c +194 -0
- data/libnet/sample/stp.c +227 -0
- data/libnet/sample/synflood.c +200 -0
- data/libnet/sample/synflood6.c +209 -0
- data/libnet/sample/synflood6_frag.c +234 -0
- data/libnet/sample/tcp1.c +227 -0
- data/libnet/sample/tcp2.c +192 -0
- data/libnet/sample/tftp.c +207 -0
- data/libnet/sample/tring_tcp1.c +214 -0
- data/libnet/sample/tring_tcp2.c +210 -0
- data/libnet/sample/udp1.c +223 -0
- data/libnet/sample/udp2.c +232 -0
- data/libnet/sample/win32/CVS/Entries +9 -0
- data/libnet/sample/win32/CVS/Repository +1 -0
- data/libnet/sample/win32/CVS/Root +1 -0
- data/libnet/sample/win32/arp/CVS/Entries +2 -0
- data/libnet/sample/win32/arp/CVS/Repository +1 -0
- data/libnet/sample/win32/arp/CVS/Root +1 -0
- data/libnet/sample/win32/arp/arp.vcproj +136 -0
- data/libnet/sample/win32/cdp/CVS/Entries +2 -0
- data/libnet/sample/win32/cdp/CVS/Repository +1 -0
- data/libnet/sample/win32/cdp/CVS/Root +1 -0
- data/libnet/sample/win32/cdp/cdp.vcproj +136 -0
- data/libnet/sample/win32/dhcp_discover/CVS/Entries +2 -0
- data/libnet/sample/win32/dhcp_discover/CVS/Repository +1 -0
- data/libnet/sample/win32/dhcp_discover/CVS/Root +1 -0
- data/libnet/sample/win32/dhcp_discover/dhcp_discover.vcproj +139 -0
- data/libnet/sample/win32/dns/CVS/Entries +2 -0
- data/libnet/sample/win32/dns/CVS/Repository +1 -0
- data/libnet/sample/win32/dns/CVS/Root +1 -0
- data/libnet/sample/win32/dns/dns.vcproj +139 -0
- data/libnet/sample/win32/get_addr/CVS/Entries +2 -0
- data/libnet/sample/win32/get_addr/CVS/Repository +1 -0
- data/libnet/sample/win32/get_addr/CVS/Root +1 -0
- data/libnet/sample/win32/get_addr/get_addr.vcproj +139 -0
- data/libnet/sample/win32/getopt.c +121 -0
- data/libnet/sample/win32/icmp_echo_cq/CVS/Entries +2 -0
- data/libnet/sample/win32/icmp_echo_cq/CVS/Repository +1 -0
- data/libnet/sample/win32/icmp_echo_cq/CVS/Root +1 -0
- data/libnet/sample/win32/icmp_echo_cq/icmp_echo_cq.vcproj +139 -0
- data/libnet/sample/win32/tcp1/CVS/Entries +2 -0
- data/libnet/sample/win32/tcp1/CVS/Repository +1 -0
- data/libnet/sample/win32/tcp1/CVS/Root +1 -0
- data/libnet/sample/win32/tcp1/tcp1.vcproj +142 -0
- data/libnet/sample/win32/udp1/CVS/Entries +3 -0
- data/libnet/sample/win32/udp1/CVS/Repository +1 -0
- data/libnet/sample/win32/udp1/CVS/Root +1 -0
- data/libnet/sample/win32/udp1/dns.vcproj +125 -0
- data/libnet/sample/win32/udp1/udp1.vcproj +139 -0
- data/libnet/src/CVS/Entries +60 -0
- data/libnet/src/CVS/Repository +1 -0
- data/libnet/src/CVS/Root +1 -0
- data/libnet/src/Makefile.am +71 -0
- data/libnet/src/Makefile.in +428 -0
- data/libnet/src/libnet_advanced.c +136 -0
- data/libnet/src/libnet_asn1.c +436 -0
- data/libnet/src/libnet_build_802.1q.c +115 -0
- data/libnet/src/libnet_build_802.1x.c +103 -0
- data/libnet/src/libnet_build_802.2.c +167 -0
- data/libnet/src/libnet_build_802.3.c +101 -0
- data/libnet/src/libnet_build_arp.c +169 -0
- data/libnet/src/libnet_build_bgp.c +350 -0
- data/libnet/src/libnet_build_cdp.c +191 -0
- data/libnet/src/libnet_build_data.c +90 -0
- data/libnet/src/libnet_build_dhcp.c +156 -0
- data/libnet/src/libnet_build_dns.c +129 -0
- data/libnet/src/libnet_build_ethernet.c +173 -0
- data/libnet/src/libnet_build_fddi.c +191 -0
- data/libnet/src/libnet_build_gre.c +427 -0
- data/libnet/src/libnet_build_icmp.c +437 -0
- data/libnet/src/libnet_build_igmp.c +112 -0
- data/libnet/src/libnet_build_ip.c +892 -0
- data/libnet/src/libnet_build_ipsec.c +232 -0
- data/libnet/src/libnet_build_isl.c +113 -0
- data/libnet/src/libnet_build_link.c +90 -0
- data/libnet/src/libnet_build_mpls.c +112 -0
- data/libnet/src/libnet_build_ntp.c +121 -0
- data/libnet/src/libnet_build_ospf.c +699 -0
- data/libnet/src/libnet_build_rip.c +108 -0
- data/libnet/src/libnet_build_rpc.c +138 -0
- data/libnet/src/libnet_build_sebek.c +108 -0
- data/libnet/src/libnet_build_snmp.c +52 -0
- data/libnet/src/libnet_build_stp.c +222 -0
- data/libnet/src/libnet_build_tcp.c +365 -0
- data/libnet/src/libnet_build_token_ring.c +193 -0
- data/libnet/src/libnet_build_udp.c +111 -0
- data/libnet/src/libnet_build_vrrp.c +117 -0
- data/libnet/src/libnet_checksum.c +376 -0
- data/libnet/src/libnet_cq.c +395 -0
- data/libnet/src/libnet_crc.c +113 -0
- data/libnet/src/libnet_dll.c +47 -0
- data/libnet/src/libnet_error.c +55 -0
- data/libnet/src/libnet_if_addr.c +415 -0
- data/libnet/src/libnet_init.c +234 -0
- data/libnet/src/libnet_internal.c +310 -0
- data/libnet/src/libnet_link_bpf.c +348 -0
- data/libnet/src/libnet_link_dlpi.c +785 -0
- data/libnet/src/libnet_link_linux.c +310 -0
- data/libnet/src/libnet_link_nit.c +125 -0
- data/libnet/src/libnet_link_none.c +66 -0
- data/libnet/src/libnet_link_pf.c +179 -0
- data/libnet/src/libnet_link_snit.c +149 -0
- data/libnet/src/libnet_link_snoop.c +166 -0
- data/libnet/src/libnet_link_win32.c +346 -0
- data/libnet/src/libnet_pblock.c +511 -0
- data/libnet/src/libnet_port_list.c +295 -0
- data/libnet/src/libnet_prand.c +106 -0
- data/libnet/src/libnet_raw.c +257 -0
- data/libnet/src/libnet_resolve.c +414 -0
- data/libnet/src/libnet_version.c +54 -0
- data/libnet/src/libnet_write.c +502 -0
- data/libnet/version.h.in +6 -0
- data/libnet/win32/CVS/Entries +15 -0
- data/libnet/win32/CVS/Repository +1 -0
- data/libnet/win32/CVS/Root +1 -0
- data/libnet/win32/Libnet-1.1.1-2002.sln +77 -0
- data/libnet/win32/Libnet-1.1.1-2003.ncb +0 -0
- data/libnet/win32/Libnet-1.1.1-2003.sln +84 -0
- data/libnet/win32/Libnet-1.1.1-2003.suo +0 -0
- data/libnet/win32/Libnet-1.1.1.vcproj +311 -0
- data/libnet/win32/Libnet-latest.ncb +0 -0
- data/libnet/win32/Libnet-latest.opt +0 -0
- data/libnet/win32/Libnet-latest.sln +77 -0
- data/libnet/win32/Libnet-latest.suo +0 -0
- data/libnet/win32/Libnet-latest.vcproj +311 -0
- data/libnet/win32/Libnet.dsp +337 -0
- data/libnet/win32/Libnet.dsw +32 -0
- data/libnet/win32/README.txt +57 -0
- data/libnet/win32/libnet_dll.def +164 -0
- data/test/tc_arp.rb +169 -0
- data/test/tc_class.rb +219 -0
- data/test/tc_ethernet.rb +97 -0
- data/test/tc_header.rb +163 -0
- data/test/tc_init.rb +25 -0
- data/test/tc_ipv4.rb +219 -0
- data/test/tc_ipv6.rb +235 -0
- data/test/tc_udp.rb +229 -0
- data/test/tc_vlan.rb +118 -0
- data/test/ts_all.rb +15 -0
- metadata +401 -0
@@ -0,0 +1,257 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: dhcp_discover.c,v 1.3 2004/01/03 20:31:01 mike Exp $
|
3
|
+
*
|
4
|
+
* libnet 1.1
|
5
|
+
* Build a DHCP discover packet
|
6
|
+
* To view: /usr/sbin/tcpdump -vvvvven -s 4096 'port 67 or port 68'
|
7
|
+
*
|
8
|
+
* Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
|
9
|
+
* All rights reserved.
|
10
|
+
*
|
11
|
+
* Redistribution and use in source and binary forms, with or without
|
12
|
+
* modification, are permitted provided that the following conditions
|
13
|
+
* are met:
|
14
|
+
* 1. Redistributions of source code must retain the above copyright
|
15
|
+
* notice, this list of conditions and the following disclaimer.
|
16
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
17
|
+
* notice, this list of conditions and the following disclaimer in the
|
18
|
+
* documentation and/or other materials provided with the distribution.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
21
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
23
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
26
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
27
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
28
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
29
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
30
|
+
* SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#if (HAVE_CONFIG_H)
|
35
|
+
#include "../include/config.h"
|
36
|
+
#endif
|
37
|
+
#include "./libnet_test.h"
|
38
|
+
#ifdef __WIN32__
|
39
|
+
#include "../include/win32/getopt.h"
|
40
|
+
#endif
|
41
|
+
|
42
|
+
void
|
43
|
+
usage(char *prog)
|
44
|
+
{
|
45
|
+
fprintf(stderr, "Usage: %s interface\n", prog);
|
46
|
+
exit(1);
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
int
|
51
|
+
main(int argc, char *argv[])
|
52
|
+
{
|
53
|
+
char *intf;
|
54
|
+
u_long src_ip, options_len, orig_len;
|
55
|
+
int i;
|
56
|
+
|
57
|
+
libnet_t *l;
|
58
|
+
libnet_ptag_t t;
|
59
|
+
libnet_ptag_t ip;
|
60
|
+
libnet_ptag_t udp;
|
61
|
+
libnet_ptag_t dhcp;
|
62
|
+
struct libnet_ether_addr *ethaddr;
|
63
|
+
struct libnet_stats ls;
|
64
|
+
|
65
|
+
char errbuf[LIBNET_ERRBUF_SIZE];
|
66
|
+
|
67
|
+
u_char options_req[] = { LIBNET_DHCP_SUBNETMASK , LIBNET_DHCP_BROADCASTADDR , LIBNET_DHCP_TIMEOFFSET , LIBNET_DHCP_ROUTER , LIBNET_DHCP_DOMAINNAME , LIBNET_DHCP_DNS , LIBNET_DHCP_HOSTNAME };
|
68
|
+
u_char *options;
|
69
|
+
u_char enet_dst[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
70
|
+
u_char *tmp;
|
71
|
+
|
72
|
+
// have to specify interface
|
73
|
+
if (argc != 2)
|
74
|
+
usage(argv[0]);
|
75
|
+
intf = argv[1];
|
76
|
+
|
77
|
+
l = libnet_init(
|
78
|
+
LIBNET_LINK, // injection type
|
79
|
+
intf, // network interface
|
80
|
+
errbuf); // errbuf
|
81
|
+
if (!l)
|
82
|
+
{
|
83
|
+
fprintf(stderr, "libnet_init: %s", errbuf);
|
84
|
+
exit(EXIT_FAILURE);
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
src_ip = libnet_get_ipaddr4(l);;
|
88
|
+
|
89
|
+
if ((ethaddr = libnet_get_hwaddr(l)) == NULL)
|
90
|
+
{
|
91
|
+
fprintf(stderr, "libnet_get_hwaddr: %s\n", libnet_geterror(l));
|
92
|
+
exit(EXIT_FAILURE);
|
93
|
+
}
|
94
|
+
|
95
|
+
printf("ip addr : %s\n", libnet_addr2name4(src_ip, LIBNET_DONT_RESOLVE));
|
96
|
+
printf("eth addr : ");
|
97
|
+
for (i = 0; i < 6; i++) {
|
98
|
+
printf("%2.2x", ethaddr->ether_addr_octet[i]);
|
99
|
+
if (i != 5) {
|
100
|
+
printf(":");
|
101
|
+
}
|
102
|
+
}
|
103
|
+
printf("\n");
|
104
|
+
|
105
|
+
|
106
|
+
// build options packet
|
107
|
+
i = 0;
|
108
|
+
options_len = 3; // update total payload size
|
109
|
+
|
110
|
+
// we are a discover packet
|
111
|
+
options = malloc(3);
|
112
|
+
options[i++] = LIBNET_DHCP_MESSAGETYPE; // type
|
113
|
+
options[i++] = 1; // len
|
114
|
+
options[i++] = LIBNET_DHCP_MSGDISCOVER; // data
|
115
|
+
|
116
|
+
orig_len = options_len;
|
117
|
+
options_len += sizeof(options_req) + 2; // update total payload size
|
118
|
+
|
119
|
+
// workaround for realloc on old machines
|
120
|
+
// options = realloc(options, options_len); // resize options buffer
|
121
|
+
tmp = malloc(options_len);
|
122
|
+
memcpy(tmp, options, orig_len);
|
123
|
+
free(options);
|
124
|
+
options = tmp;
|
125
|
+
|
126
|
+
// we are going to request some parameters
|
127
|
+
options[i++] = LIBNET_DHCP_PARAMREQUEST; // type
|
128
|
+
options[i++] = sizeof(options_req); // len
|
129
|
+
memcpy(options + i, options_req, sizeof(options_req)); // data
|
130
|
+
i += sizeof(options_req);
|
131
|
+
|
132
|
+
// if we have an ip already, let's request it.
|
133
|
+
if (src_ip)
|
134
|
+
{
|
135
|
+
orig_len = options_len;
|
136
|
+
options_len += 2 + sizeof(src_ip);
|
137
|
+
|
138
|
+
// workaround for realloc on old machines
|
139
|
+
// options = realloc(options, options_len);
|
140
|
+
tmp = malloc(options_len);
|
141
|
+
memcpy(tmp, options, orig_len);
|
142
|
+
free(options);
|
143
|
+
options = tmp;
|
144
|
+
|
145
|
+
options[i++] = LIBNET_DHCP_DISCOVERADDR; // type
|
146
|
+
options[i++] = sizeof(src_ip); // len
|
147
|
+
memcpy(options + i, (char *)&src_ip, sizeof(src_ip));// data
|
148
|
+
i += sizeof(src_ip);
|
149
|
+
}
|
150
|
+
|
151
|
+
// end our options packet
|
152
|
+
// workaround for realloc on old machines
|
153
|
+
// options = realloc(options, options_len); // resize options buffer
|
154
|
+
orig_len = options_len;
|
155
|
+
options_len += 1;
|
156
|
+
tmp = malloc(options_len);
|
157
|
+
memcpy(tmp, options, orig_len);
|
158
|
+
free(options);
|
159
|
+
options = tmp;
|
160
|
+
options[i++] = LIBNET_DHCP_END;
|
161
|
+
|
162
|
+
|
163
|
+
// make sure we are at least the minimum length, if not fill
|
164
|
+
// this could go in libnet, but we will leave it in the app for now
|
165
|
+
if (options_len + LIBNET_DHCPV4_H < LIBNET_BOOTP_MIN_LEN)
|
166
|
+
{
|
167
|
+
orig_len = options_len;
|
168
|
+
options_len = LIBNET_BOOTP_MIN_LEN - LIBNET_DHCPV4_H;
|
169
|
+
|
170
|
+
// workaround for realloc on old machines
|
171
|
+
// options = realloc(options, options_len);
|
172
|
+
tmp = malloc(options_len);
|
173
|
+
memcpy(tmp, options, orig_len);
|
174
|
+
free(options);
|
175
|
+
options = tmp;
|
176
|
+
|
177
|
+
memset(options + i, 0, options_len - i);
|
178
|
+
}
|
179
|
+
|
180
|
+
// the goodies are here
|
181
|
+
dhcp = libnet_build_dhcpv4(
|
182
|
+
LIBNET_DHCP_REQUEST, // opcode
|
183
|
+
1, // hardware type
|
184
|
+
6, // hardware address length
|
185
|
+
0, // hop count
|
186
|
+
0xdeadbeef, // transaction id
|
187
|
+
0, // seconds since bootstrap
|
188
|
+
0x8000, // flags
|
189
|
+
0, // client ip
|
190
|
+
0, // your ip
|
191
|
+
0, // server ip
|
192
|
+
0, // gateway ip
|
193
|
+
ethaddr->ether_addr_octet, // client hardware addr
|
194
|
+
NULL, // server host name
|
195
|
+
NULL, // boot file
|
196
|
+
options, // dhcp options stuck in payload since it is dynamic
|
197
|
+
options_len, // length of options
|
198
|
+
l, // libnet handle
|
199
|
+
0); // libnet id
|
200
|
+
|
201
|
+
// wrap it
|
202
|
+
udp = libnet_build_udp(
|
203
|
+
68, // source port
|
204
|
+
67, // destination port
|
205
|
+
LIBNET_UDP_H + LIBNET_DHCPV4_H + options_len, // packet size
|
206
|
+
0, // checksum
|
207
|
+
NULL, // payload
|
208
|
+
0, // payload size
|
209
|
+
l, // libnet handle
|
210
|
+
0); // libnet id
|
211
|
+
|
212
|
+
// hook me up with some ipv4
|
213
|
+
ip = libnet_build_ipv4(
|
214
|
+
LIBNET_IPV4_H + LIBNET_UDP_H + LIBNET_DHCPV4_H
|
215
|
+
+ options_len, // length
|
216
|
+
0x10, // TOS
|
217
|
+
0, // IP ID
|
218
|
+
0, // IP Frag
|
219
|
+
16, // TTL
|
220
|
+
IPPROTO_UDP, // protocol
|
221
|
+
0, // checksum
|
222
|
+
src_ip, // src ip
|
223
|
+
inet_addr("255.255.255.255"), // destination ip
|
224
|
+
NULL, // payload
|
225
|
+
0, // payload size
|
226
|
+
l, // libnet handle
|
227
|
+
0); // libnet id
|
228
|
+
|
229
|
+
// we can just autobuild since we arent doing anything tricky
|
230
|
+
t = libnet_autobuild_ethernet(
|
231
|
+
enet_dst, // ethernet destination
|
232
|
+
ETHERTYPE_IP, // protocol type
|
233
|
+
l); // libnet handle
|
234
|
+
|
235
|
+
// write to the wire
|
236
|
+
if (libnet_write(l) == -1)
|
237
|
+
{
|
238
|
+
fprintf(stderr, " %s: libnet_write: %s\n", argv[0],
|
239
|
+
strerror(errno));
|
240
|
+
exit(EXIT_FAILURE);
|
241
|
+
}
|
242
|
+
|
243
|
+
// fill and print stats
|
244
|
+
libnet_stats(l, &ls);
|
245
|
+
fprintf(stderr, "Packets sent: %lld\n"
|
246
|
+
"Packet errors: %lld\n"
|
247
|
+
"Bytes written: %lld\n",
|
248
|
+
ls.packets_sent, ls.packet_errors, ls.bytes_written);
|
249
|
+
libnet_destroy(l);
|
250
|
+
|
251
|
+
// free mem
|
252
|
+
free(options);
|
253
|
+
|
254
|
+
exit(0);
|
255
|
+
}
|
256
|
+
exit(0);
|
257
|
+
}
|
data/libnet/sample/dns.c
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* libnet 1.1
|
4
|
+
* Build a DNSv4 packet
|
5
|
+
* To view: /usr/sbin/tcpdump -vvvvven -s 0 port 53
|
6
|
+
*
|
7
|
+
* Copyright (c) 2003 Fr�d�ric Raynal <pappy@security-labs.org>
|
8
|
+
* All rights reserved.
|
9
|
+
*
|
10
|
+
* Redistribution and use in source and binary forms, with or without
|
11
|
+
* modification, are permitted provided that the following conditions
|
12
|
+
* are met:
|
13
|
+
* 1. Redistributions of source code must retain the above copyright
|
14
|
+
* notice, this list of conditions and the following disclaimer.
|
15
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
16
|
+
* notice, this list of conditions and the following disclaimer in the
|
17
|
+
* documentation and/or other materials provided with the distribution.
|
18
|
+
*
|
19
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
20
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
23
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
24
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
25
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
26
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
27
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
28
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
29
|
+
* SUCH DAMAGE.
|
30
|
+
*
|
31
|
+
*/
|
32
|
+
|
33
|
+
#if (HAVE_CONFIG_H)
|
34
|
+
#include "../include/config.h"
|
35
|
+
#endif
|
36
|
+
#include "./libnet_test.h"
|
37
|
+
#ifdef __WIN32__
|
38
|
+
#include "../include/win32/getopt.h"
|
39
|
+
#endif
|
40
|
+
|
41
|
+
void
|
42
|
+
usage(char *prog)
|
43
|
+
{
|
44
|
+
fprintf(stderr, "Usage: %s -d dst_ip -q query_host [-s src_ip] [-t]\n", prog);
|
45
|
+
exit(1);
|
46
|
+
}
|
47
|
+
|
48
|
+
|
49
|
+
int
|
50
|
+
main(int argc, char *argv[])
|
51
|
+
{
|
52
|
+
char c;
|
53
|
+
u_long src_ip = 0, dst_ip = 0;
|
54
|
+
u_short type = LIBNET_UDP_DNSV4_H;
|
55
|
+
libnet_t *l;
|
56
|
+
|
57
|
+
libnet_ptag_t ip;
|
58
|
+
libnet_ptag_t ptag4; /* TCP or UDP ptag */
|
59
|
+
libnet_ptag_t dns;
|
60
|
+
|
61
|
+
char errbuf[LIBNET_ERRBUF_SIZE];
|
62
|
+
char *query = NULL;
|
63
|
+
char payload[1024];
|
64
|
+
u_short payload_s;
|
65
|
+
|
66
|
+
printf("libnet 1.1 packet shaping: DNSv4[raw]\n");
|
67
|
+
|
68
|
+
/*
|
69
|
+
* Initialize the library. Root priviledges are required.
|
70
|
+
*/
|
71
|
+
l = libnet_init(
|
72
|
+
LIBNET_RAW4, /* injection type */
|
73
|
+
NULL, /* network interface */
|
74
|
+
errbuf); /* error buffer */
|
75
|
+
|
76
|
+
if (!l)
|
77
|
+
{
|
78
|
+
fprintf(stderr, "libnet_init: %s", errbuf);
|
79
|
+
exit(EXIT_FAILURE);
|
80
|
+
}
|
81
|
+
|
82
|
+
/*
|
83
|
+
* parse options
|
84
|
+
*/
|
85
|
+
while ((c = getopt(argc, argv, "d:s:q:t")) != EOF)
|
86
|
+
{
|
87
|
+
switch (c)
|
88
|
+
{
|
89
|
+
|
90
|
+
case 'd':
|
91
|
+
if ((dst_ip = libnet_name2addr4(l, optarg, LIBNET_RESOLVE)) == -1)
|
92
|
+
{
|
93
|
+
fprintf(stderr, "Bad destination IP address: %s\n", optarg);
|
94
|
+
exit(EXIT_FAILURE);
|
95
|
+
}
|
96
|
+
break;
|
97
|
+
case 's':
|
98
|
+
if ((src_ip = libnet_name2addr4(l, optarg, LIBNET_RESOLVE)) == -1)
|
99
|
+
{
|
100
|
+
fprintf(stderr, "Bad source IP address: %s\n", optarg);
|
101
|
+
exit(EXIT_FAILURE);
|
102
|
+
}
|
103
|
+
break;
|
104
|
+
case 'q':
|
105
|
+
query = optarg;
|
106
|
+
break;
|
107
|
+
case 't':
|
108
|
+
type = LIBNET_TCP_DNSV4_H;
|
109
|
+
break;
|
110
|
+
default:
|
111
|
+
exit(EXIT_FAILURE);
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
if (!src_ip)
|
116
|
+
{
|
117
|
+
src_ip = libnet_get_ipaddr4(l);
|
118
|
+
}
|
119
|
+
|
120
|
+
if (!dst_ip || !query)
|
121
|
+
{
|
122
|
+
usage(argv[0]);
|
123
|
+
exit(EXIT_FAILURE);
|
124
|
+
}
|
125
|
+
|
126
|
+
/*
|
127
|
+
* build dns payload
|
128
|
+
*/
|
129
|
+
payload_s = snprintf(payload, sizeof payload, "%c%s%c%c%c%c%c",
|
130
|
+
(char)(strlen(query)&0xff), query, 0x00, 0x00, 0x01, 0x00, 0x01);
|
131
|
+
|
132
|
+
/*
|
133
|
+
* build packet
|
134
|
+
*/
|
135
|
+
dns = libnet_build_dnsv4(
|
136
|
+
type, /* TCP or UDP */
|
137
|
+
0x7777, /* id */
|
138
|
+
0x0100, /* request */
|
139
|
+
1, /* num_q */
|
140
|
+
0, /* num_anws_rr */
|
141
|
+
0, /* num_auth_rr */
|
142
|
+
0, /* num_addi_rr */
|
143
|
+
payload,
|
144
|
+
payload_s,
|
145
|
+
l,
|
146
|
+
0
|
147
|
+
);
|
148
|
+
|
149
|
+
if (dns == -1)
|
150
|
+
{
|
151
|
+
fprintf(stderr, "Can't build DNS packet: %s\n", libnet_geterror(l));
|
152
|
+
goto bad;
|
153
|
+
}
|
154
|
+
|
155
|
+
if (type == LIBNET_TCP_DNSV4_H) /* TCP DNS */
|
156
|
+
{
|
157
|
+
ptag4 = libnet_build_tcp(
|
158
|
+
0x6666, /* source port */
|
159
|
+
53, /* destination port */
|
160
|
+
0x01010101, /* sequence number */
|
161
|
+
0x02020202, /* acknowledgement num */
|
162
|
+
TH_PUSH|TH_ACK, /* control flags */
|
163
|
+
32767, /* window size */
|
164
|
+
0, /* checksum */
|
165
|
+
0, /* urgent pointer */
|
166
|
+
LIBNET_TCP_H + LIBNET_TCP_DNSV4_H + payload_s, /* TCP packet size */
|
167
|
+
NULL, /* payload */
|
168
|
+
0, /* payload size */
|
169
|
+
l, /* libnet handle */
|
170
|
+
0); /* libnet id */
|
171
|
+
|
172
|
+
if (ptag4 == -1)
|
173
|
+
{
|
174
|
+
fprintf(stderr, "Can't build UDP header: %s\n", libnet_geterror(l));
|
175
|
+
goto bad;
|
176
|
+
}
|
177
|
+
|
178
|
+
|
179
|
+
ip = libnet_build_ipv4(
|
180
|
+
LIBNET_IPV4_H + LIBNET_TCP_H + type + payload_s,/* length */
|
181
|
+
0, /* TOS */
|
182
|
+
242, /* IP ID */
|
183
|
+
0, /* IP Frag */
|
184
|
+
64, /* TTL */
|
185
|
+
IPPROTO_TCP, /* protocol */
|
186
|
+
0, /* checksum */
|
187
|
+
src_ip, /* source IP */
|
188
|
+
dst_ip, /* destination IP */
|
189
|
+
NULL, /* payload */
|
190
|
+
0, /* payload size */
|
191
|
+
l, /* libnet handle */
|
192
|
+
0); /* libnet id */
|
193
|
+
|
194
|
+
if (ip == -1)
|
195
|
+
{
|
196
|
+
fprintf(stderr, "Can't build IP header: %s\n", libnet_geterror(l));
|
197
|
+
exit(EXIT_FAILURE);
|
198
|
+
}
|
199
|
+
|
200
|
+
}
|
201
|
+
else /* UDP DNS */
|
202
|
+
{
|
203
|
+
ptag4 = libnet_build_udp(
|
204
|
+
0x6666, /* source port */
|
205
|
+
53, /* destination port */
|
206
|
+
LIBNET_UDP_H + LIBNET_UDP_DNSV4_H + payload_s, /* packet length */
|
207
|
+
0, /* checksum */
|
208
|
+
NULL, /* payload */
|
209
|
+
0, /* payload size */
|
210
|
+
l, /* libnet handle */
|
211
|
+
0); /* libnet id */
|
212
|
+
|
213
|
+
if (ptag4 == -1)
|
214
|
+
{
|
215
|
+
fprintf(stderr, "Can't build UDP header: %s\n", libnet_geterror(l));
|
216
|
+
goto bad;
|
217
|
+
}
|
218
|
+
|
219
|
+
|
220
|
+
ip = libnet_build_ipv4(
|
221
|
+
LIBNET_IPV4_H + LIBNET_UDP_H + type + payload_s,/* length */
|
222
|
+
0, /* TOS */
|
223
|
+
242, /* IP ID */
|
224
|
+
0, /* IP Frag */
|
225
|
+
64, /* TTL */
|
226
|
+
IPPROTO_UDP, /* protocol */
|
227
|
+
0, /* checksum */
|
228
|
+
src_ip, /* source IP */
|
229
|
+
dst_ip, /* destination IP */
|
230
|
+
NULL, /* payload */
|
231
|
+
0, /* payload size */
|
232
|
+
l, /* libnet handle */
|
233
|
+
0); /* libnet id */
|
234
|
+
|
235
|
+
if (ip == -1)
|
236
|
+
{
|
237
|
+
fprintf(stderr, "Can't build IP header: %s\n", libnet_geterror(l));
|
238
|
+
exit(EXIT_FAILURE);
|
239
|
+
}
|
240
|
+
}
|
241
|
+
|
242
|
+
/*
|
243
|
+
* write to the wire
|
244
|
+
*/
|
245
|
+
c = libnet_write(l);
|
246
|
+
if (c == -1)
|
247
|
+
{
|
248
|
+
fprintf(stderr, "Write error: %s\n", libnet_geterror(l));
|
249
|
+
goto bad;
|
250
|
+
}
|
251
|
+
else
|
252
|
+
{
|
253
|
+
fprintf(stderr, "Wrote %d byte DNS packet; check the wire.\n", c);
|
254
|
+
}
|
255
|
+
libnet_destroy(l);
|
256
|
+
return (EXIT_SUCCESS);
|
257
|
+
bad:
|
258
|
+
libnet_destroy(l);
|
259
|
+
return (EXIT_FAILURE);
|
260
|
+
}
|
@@ -0,0 +1,113 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: dot1x.c,v 1.2 2004/01/03 20:31:01 mike Exp $
|
3
|
+
*
|
4
|
+
* libnet 1.1
|
5
|
+
* Build a dot1x packet
|
6
|
+
*
|
7
|
+
* Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
|
8
|
+
* All rights reserved.
|
9
|
+
*
|
10
|
+
* Redistribution and use in source and binary forms, with or without
|
11
|
+
* modification, are permitted provided that the following conditions
|
12
|
+
* are met:
|
13
|
+
* 1. Redistributions of source code must retain the above copyright
|
14
|
+
* notice, this list of conditions and the following disclaimer.
|
15
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
16
|
+
* notice, this list of conditions and the following disclaimer in the
|
17
|
+
* documentation and/or other materials provided with the distribution.
|
18
|
+
*
|
19
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
20
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
23
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
24
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
25
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
26
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
27
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
28
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
29
|
+
* SUCH DAMAGE.
|
30
|
+
*
|
31
|
+
*/
|
32
|
+
|
33
|
+
#if (HAVE_CONFIG_H)
|
34
|
+
#include "../include/config.h"
|
35
|
+
#endif
|
36
|
+
#include "./libnet_test.h"
|
37
|
+
|
38
|
+
int
|
39
|
+
main(int argc, char *argv[])
|
40
|
+
{
|
41
|
+
int c;
|
42
|
+
libnet_t *l;
|
43
|
+
libnet_ptag_t t;
|
44
|
+
u_char eap_dst[6] = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x03};
|
45
|
+
char *device = NULL;
|
46
|
+
char errbuf[LIBNET_ERRBUF_SIZE];
|
47
|
+
/* Code Id Length(2) Type DesiredType */
|
48
|
+
char payload[] = {0x01, 0x0a, 0x00, 0x7f, 0x03, 0x05};
|
49
|
+
|
50
|
+
printf("libnet 1.1 packet shaping: dot1x\n");
|
51
|
+
|
52
|
+
if (argc > 1)
|
53
|
+
{
|
54
|
+
device = argv[1];
|
55
|
+
}
|
56
|
+
l = libnet_init(
|
57
|
+
LIBNET_LINK_ADV, /* injection type */
|
58
|
+
device, /* network interface */
|
59
|
+
errbuf); /* errbuf */
|
60
|
+
|
61
|
+
if (l == NULL)
|
62
|
+
{
|
63
|
+
fprintf(stderr, "libnet_init() failed: %s", errbuf);
|
64
|
+
exit(EXIT_FAILURE);
|
65
|
+
}
|
66
|
+
|
67
|
+
t = libnet_build_802_1x(
|
68
|
+
0,
|
69
|
+
LIBNET_802_1X_PACKET,
|
70
|
+
sizeof(payload),
|
71
|
+
payload,
|
72
|
+
sizeof(payload),
|
73
|
+
l,
|
74
|
+
0);
|
75
|
+
if (t == -1)
|
76
|
+
{
|
77
|
+
fprintf(stderr, "Can't build dot1x header: %s\n", libnet_geterror(l));
|
78
|
+
goto bad;
|
79
|
+
}
|
80
|
+
|
81
|
+
t = libnet_autobuild_ethernet(
|
82
|
+
eap_dst, /* ethernet destination */
|
83
|
+
ETHERTYPE_EAP, /* protocol type */
|
84
|
+
l); /* libnet handle */
|
85
|
+
if (t == -1)
|
86
|
+
{
|
87
|
+
fprintf(stderr, "Can't build ethernet header: %s\n", libnet_geterror(l));
|
88
|
+
goto bad;
|
89
|
+
}
|
90
|
+
|
91
|
+
/*
|
92
|
+
* Write it to the wire.
|
93
|
+
*/
|
94
|
+
c = libnet_write(l);
|
95
|
+
|
96
|
+
if (c == -1)
|
97
|
+
{
|
98
|
+
fprintf(stderr, "Write error: %s\n", libnet_geterror(l));
|
99
|
+
goto bad;
|
100
|
+
}
|
101
|
+
else
|
102
|
+
{
|
103
|
+
fprintf(stderr, "Wrote %d byte dot1x packet from context \"%s\"; "
|
104
|
+
"check the wire.\n", c, libnet_cq_getlabel(l));
|
105
|
+
}
|
106
|
+
libnet_destroy(l);
|
107
|
+
return (EXIT_SUCCESS);
|
108
|
+
bad:
|
109
|
+
libnet_destroy(l);
|
110
|
+
return (EXIT_FAILURE);
|
111
|
+
}
|
112
|
+
|
113
|
+
/* EOF */
|