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.
Files changed (306) hide show
  1. data/CHANGELOG +15 -0
  2. data/LICENSE +28 -0
  3. data/README +187 -0
  4. data/Rakefile +110 -0
  5. data/ext/extconf.rb +60 -0
  6. data/ext/libnet.c +705 -0
  7. data/ext/libnet_arp.c +152 -0
  8. data/ext/libnet_ethernet.c +115 -0
  9. data/ext/libnet_ipv4.c +140 -0
  10. data/ext/libnet_ipv6.c +138 -0
  11. data/ext/libnet_udp.c +112 -0
  12. data/ext/libnet_vlan.c +131 -0
  13. data/lib/libnet4r/header.rb +609 -0
  14. data/lib/libnet4r/helpers.rb +19 -0
  15. data/lib/libnet4r/libnet.rb +39 -0
  16. data/libnet/CVS/Entries +24 -0
  17. data/libnet/CVS/Repository +1 -0
  18. data/libnet/CVS/Root +1 -0
  19. data/libnet/Makefile.am +15 -0
  20. data/libnet/Makefile.am.common +10 -0
  21. data/libnet/Makefile.in +443 -0
  22. data/libnet/README +21 -0
  23. data/libnet/VERSION +1 -0
  24. data/libnet/acconfig.h +36 -0
  25. data/libnet/acinclude.m4 +463 -0
  26. data/libnet/aclocal.m4 +1337 -0
  27. data/libnet/autom4te.cache/CVS/Entries +1 -0
  28. data/libnet/autom4te.cache/CVS/Repository +1 -0
  29. data/libnet/autom4te.cache/CVS/Root +1 -0
  30. data/libnet/autom4te.cache/output.0 +6225 -0
  31. data/libnet/autom4te.cache/requests +111 -0
  32. data/libnet/autom4te.cache/traces.0 +272 -0
  33. data/libnet/config.guess +1314 -0
  34. data/libnet/config.sub +1410 -0
  35. data/libnet/configure +6225 -0
  36. data/libnet/configure.in +235 -0
  37. data/libnet/doc/BUGS +19 -0
  38. data/libnet/doc/CHANGELOG +527 -0
  39. data/libnet/doc/CONTRIB +53 -0
  40. data/libnet/doc/COPYING +31 -0
  41. data/libnet/doc/CVS/Entries +12 -0
  42. data/libnet/doc/CVS/Repository +1 -0
  43. data/libnet/doc/CVS/Root +1 -0
  44. data/libnet/doc/DESIGN_NOTES +134 -0
  45. data/libnet/doc/MIGRATION +172 -0
  46. data/libnet/doc/PACKET_BUILDING +161 -0
  47. data/libnet/doc/PORTED +45 -0
  48. data/libnet/doc/RAWSOCKET_NON_SEQUITUR +41 -0
  49. data/libnet/doc/TODO +96 -0
  50. data/libnet/doc/html/acconfig_8h-source.html +49 -0
  51. data/libnet/doc/html/annotated.html +17 -0
  52. data/libnet/doc/html/bpf_8h-source.html +277 -0
  53. data/libnet/doc/html/config_8h-source.html +125 -0
  54. data/libnet/doc/html/doxygen.css +169 -0
  55. data/libnet/doc/html/doxygen.png +0 -0
  56. data/libnet/doc/html/files.html +29 -0
  57. data/libnet/doc/html/functions.html +26 -0
  58. data/libnet/doc/html/functions_vars.html +26 -0
  59. data/libnet/doc/html/getopt_8h-source.html +97 -0
  60. data/libnet/doc/html/globals.html +219 -0
  61. data/libnet/doc/html/globals_defs.html +104 -0
  62. data/libnet/doc/html/globals_func.html +136 -0
  63. data/libnet/doc/html/gnuc_8h-source.html +56 -0
  64. data/libnet/doc/html/graph_legend.dot +22 -0
  65. data/libnet/doc/html/graph_legend.html +75 -0
  66. data/libnet/doc/html/ifaddrlist_8h-source.html +65 -0
  67. data/libnet/doc/html/in__systm_8h-source.html +90 -0
  68. data/libnet/doc/html/index.html +17 -0
  69. data/libnet/doc/html/libnet-asn1_8h-source.html +268 -0
  70. data/libnet/doc/html/libnet-functions_8h-source.html +742 -0
  71. data/libnet/doc/html/libnet-functions_8h.html +8844 -0
  72. data/libnet/doc/html/libnet-headers_8h-source.html +1655 -0
  73. data/libnet/doc/html/libnet-headers_8h.html +3053 -0
  74. data/libnet/doc/html/libnet-macros_8h-source.html +161 -0
  75. data/libnet/doc/html/libnet-macros_8h.html +358 -0
  76. data/libnet/doc/html/libnet-structures_8h-source.html +233 -0
  77. data/libnet/doc/html/libnet-types_8h-source.html +58 -0
  78. data/libnet/doc/html/libnet_8h-source.html +119 -0
  79. data/libnet/doc/html/libnet_8h.html +24 -0
  80. data/libnet/doc/html/structlibnet__802__1q__hdr.html +145 -0
  81. data/libnet/doc/html/structlibnet__802__1x__hdr.html +97 -0
  82. data/libnet/doc/libnet.doxygen.conf +1102 -0
  83. data/libnet/doc/man/CVS/Entries +1 -0
  84. data/libnet/doc/man/CVS/Repository +1 -0
  85. data/libnet/doc/man/CVS/Root +1 -0
  86. data/libnet/doc/man/man3/libnet-functions.h.3 +3136 -0
  87. data/libnet/doc/man/man3/libnet-headers.h.3 +1872 -0
  88. data/libnet/doc/man/man3/libnet-macros.h.3 +172 -0
  89. data/libnet/doc/man/man3/libnet.h.3 +17 -0
  90. data/libnet/doc/man/man3/libnet_802_1q_hdr.3 +53 -0
  91. data/libnet/doc/man/man3/libnet_802_1x_hdr.3 +41 -0
  92. data/libnet/include/CVS/Entries +10 -0
  93. data/libnet/include/CVS/Repository +1 -0
  94. data/libnet/include/CVS/Root +1 -0
  95. data/libnet/include/Makefile.am +7 -0
  96. data/libnet/include/Makefile.in +395 -0
  97. data/libnet/include/bpf.h +264 -0
  98. data/libnet/include/config.h.in +118 -0
  99. data/libnet/include/gnuc.h +43 -0
  100. data/libnet/include/ifaddrlist.h +52 -0
  101. data/libnet/include/libnet/CVS/Entries +9 -0
  102. data/libnet/include/libnet/CVS/Repository +1 -0
  103. data/libnet/include/libnet/CVS/Root +1 -0
  104. data/libnet/include/libnet/Makefile.am +12 -0
  105. data/libnet/include/libnet/Makefile.in +294 -0
  106. data/libnet/include/libnet/libnet-asn1.h +255 -0
  107. data/libnet/include/libnet/libnet-functions.h +2157 -0
  108. data/libnet/include/libnet/libnet-headers.h +1662 -0
  109. data/libnet/include/libnet/libnet-macros.h +186 -0
  110. data/libnet/include/libnet/libnet-structures.h +222 -0
  111. data/libnet/include/libnet/libnet-types.h +45 -0
  112. data/libnet/include/libnet.h.in +132 -0
  113. data/libnet/include/stamp-h.in +1 -0
  114. data/libnet/include/win32/CVS/Entries +5 -0
  115. data/libnet/include/win32/CVS/Repository +1 -0
  116. data/libnet/include/win32/CVS/Root +1 -0
  117. data/libnet/include/win32/config.h +112 -0
  118. data/libnet/include/win32/getopt.h +84 -0
  119. data/libnet/include/win32/in_systm.h +77 -0
  120. data/libnet/include/win32/libnet.h +106 -0
  121. data/libnet/install-sh +250 -0
  122. data/libnet/libnet-config.in +62 -0
  123. data/libnet/libnet.doxygen.conf +1102 -0
  124. data/libnet/man/CVS/Entries +1 -0
  125. data/libnet/man/CVS/Repository +1 -0
  126. data/libnet/man/CVS/Root +1 -0
  127. data/libnet/missing +283 -0
  128. data/libnet/mkinstalldirs +40 -0
  129. data/libnet/sample/CVS/Entries +47 -0
  130. data/libnet/sample/CVS/Repository +1 -0
  131. data/libnet/sample/CVS/Root +1 -0
  132. data/libnet/sample/Makefile.am +63 -0
  133. data/libnet/sample/Makefile.in +729 -0
  134. data/libnet/sample/arp-new.c +144 -0
  135. data/libnet/sample/arp.c +151 -0
  136. data/libnet/sample/bgp4_hdr.c +225 -0
  137. data/libnet/sample/bgp4_notification.c +242 -0
  138. data/libnet/sample/bgp4_open.c +266 -0
  139. data/libnet/sample/bgp4_update.c +337 -0
  140. data/libnet/sample/cdp.c +187 -0
  141. data/libnet/sample/dhcp_discover.c +257 -0
  142. data/libnet/sample/dns.c +260 -0
  143. data/libnet/sample/dot1x.c +113 -0
  144. data/libnet/sample/fddi_tcp1.c +213 -0
  145. data/libnet/sample/fddi_tcp2.c +209 -0
  146. data/libnet/sample/get_addr.c +112 -0
  147. data/libnet/sample/gre.c +410 -0
  148. data/libnet/sample/icmp6_echoreq.c +184 -0
  149. data/libnet/sample/icmp_echo_cq.c +201 -0
  150. data/libnet/sample/icmp_redirect.c +200 -0
  151. data/libnet/sample/icmp_timeexceed.c +190 -0
  152. data/libnet/sample/icmp_timestamp.c +157 -0
  153. data/libnet/sample/icmp_unreach.c +204 -0
  154. data/libnet/sample/ieee.c +177 -0
  155. data/libnet/sample/ip_link.c +201 -0
  156. data/libnet/sample/ip_raw.c +180 -0
  157. data/libnet/sample/isl.c +167 -0
  158. data/libnet/sample/libnet_test.h +60 -0
  159. data/libnet/sample/mpls.c +251 -0
  160. data/libnet/sample/ntp.c +193 -0
  161. data/libnet/sample/ospf_hello.c +179 -0
  162. data/libnet/sample/ospf_lsa.c +190 -0
  163. data/libnet/sample/ping_of_death.c +171 -0
  164. data/libnet/sample/rpc_tcp.c +214 -0
  165. data/libnet/sample/rpc_udp.c +213 -0
  166. data/libnet/sample/sebek.c +299 -0
  167. data/libnet/sample/smurf.c +194 -0
  168. data/libnet/sample/stp.c +227 -0
  169. data/libnet/sample/synflood.c +200 -0
  170. data/libnet/sample/synflood6.c +209 -0
  171. data/libnet/sample/synflood6_frag.c +234 -0
  172. data/libnet/sample/tcp1.c +227 -0
  173. data/libnet/sample/tcp2.c +192 -0
  174. data/libnet/sample/tftp.c +207 -0
  175. data/libnet/sample/tring_tcp1.c +214 -0
  176. data/libnet/sample/tring_tcp2.c +210 -0
  177. data/libnet/sample/udp1.c +223 -0
  178. data/libnet/sample/udp2.c +232 -0
  179. data/libnet/sample/win32/CVS/Entries +9 -0
  180. data/libnet/sample/win32/CVS/Repository +1 -0
  181. data/libnet/sample/win32/CVS/Root +1 -0
  182. data/libnet/sample/win32/arp/CVS/Entries +2 -0
  183. data/libnet/sample/win32/arp/CVS/Repository +1 -0
  184. data/libnet/sample/win32/arp/CVS/Root +1 -0
  185. data/libnet/sample/win32/arp/arp.vcproj +136 -0
  186. data/libnet/sample/win32/cdp/CVS/Entries +2 -0
  187. data/libnet/sample/win32/cdp/CVS/Repository +1 -0
  188. data/libnet/sample/win32/cdp/CVS/Root +1 -0
  189. data/libnet/sample/win32/cdp/cdp.vcproj +136 -0
  190. data/libnet/sample/win32/dhcp_discover/CVS/Entries +2 -0
  191. data/libnet/sample/win32/dhcp_discover/CVS/Repository +1 -0
  192. data/libnet/sample/win32/dhcp_discover/CVS/Root +1 -0
  193. data/libnet/sample/win32/dhcp_discover/dhcp_discover.vcproj +139 -0
  194. data/libnet/sample/win32/dns/CVS/Entries +2 -0
  195. data/libnet/sample/win32/dns/CVS/Repository +1 -0
  196. data/libnet/sample/win32/dns/CVS/Root +1 -0
  197. data/libnet/sample/win32/dns/dns.vcproj +139 -0
  198. data/libnet/sample/win32/get_addr/CVS/Entries +2 -0
  199. data/libnet/sample/win32/get_addr/CVS/Repository +1 -0
  200. data/libnet/sample/win32/get_addr/CVS/Root +1 -0
  201. data/libnet/sample/win32/get_addr/get_addr.vcproj +139 -0
  202. data/libnet/sample/win32/getopt.c +121 -0
  203. data/libnet/sample/win32/icmp_echo_cq/CVS/Entries +2 -0
  204. data/libnet/sample/win32/icmp_echo_cq/CVS/Repository +1 -0
  205. data/libnet/sample/win32/icmp_echo_cq/CVS/Root +1 -0
  206. data/libnet/sample/win32/icmp_echo_cq/icmp_echo_cq.vcproj +139 -0
  207. data/libnet/sample/win32/tcp1/CVS/Entries +2 -0
  208. data/libnet/sample/win32/tcp1/CVS/Repository +1 -0
  209. data/libnet/sample/win32/tcp1/CVS/Root +1 -0
  210. data/libnet/sample/win32/tcp1/tcp1.vcproj +142 -0
  211. data/libnet/sample/win32/udp1/CVS/Entries +3 -0
  212. data/libnet/sample/win32/udp1/CVS/Repository +1 -0
  213. data/libnet/sample/win32/udp1/CVS/Root +1 -0
  214. data/libnet/sample/win32/udp1/dns.vcproj +125 -0
  215. data/libnet/sample/win32/udp1/udp1.vcproj +139 -0
  216. data/libnet/src/CVS/Entries +60 -0
  217. data/libnet/src/CVS/Repository +1 -0
  218. data/libnet/src/CVS/Root +1 -0
  219. data/libnet/src/Makefile.am +71 -0
  220. data/libnet/src/Makefile.in +428 -0
  221. data/libnet/src/libnet_advanced.c +136 -0
  222. data/libnet/src/libnet_asn1.c +436 -0
  223. data/libnet/src/libnet_build_802.1q.c +115 -0
  224. data/libnet/src/libnet_build_802.1x.c +103 -0
  225. data/libnet/src/libnet_build_802.2.c +167 -0
  226. data/libnet/src/libnet_build_802.3.c +101 -0
  227. data/libnet/src/libnet_build_arp.c +169 -0
  228. data/libnet/src/libnet_build_bgp.c +350 -0
  229. data/libnet/src/libnet_build_cdp.c +191 -0
  230. data/libnet/src/libnet_build_data.c +90 -0
  231. data/libnet/src/libnet_build_dhcp.c +156 -0
  232. data/libnet/src/libnet_build_dns.c +129 -0
  233. data/libnet/src/libnet_build_ethernet.c +173 -0
  234. data/libnet/src/libnet_build_fddi.c +191 -0
  235. data/libnet/src/libnet_build_gre.c +427 -0
  236. data/libnet/src/libnet_build_icmp.c +437 -0
  237. data/libnet/src/libnet_build_igmp.c +112 -0
  238. data/libnet/src/libnet_build_ip.c +892 -0
  239. data/libnet/src/libnet_build_ipsec.c +232 -0
  240. data/libnet/src/libnet_build_isl.c +113 -0
  241. data/libnet/src/libnet_build_link.c +90 -0
  242. data/libnet/src/libnet_build_mpls.c +112 -0
  243. data/libnet/src/libnet_build_ntp.c +121 -0
  244. data/libnet/src/libnet_build_ospf.c +699 -0
  245. data/libnet/src/libnet_build_rip.c +108 -0
  246. data/libnet/src/libnet_build_rpc.c +138 -0
  247. data/libnet/src/libnet_build_sebek.c +108 -0
  248. data/libnet/src/libnet_build_snmp.c +52 -0
  249. data/libnet/src/libnet_build_stp.c +222 -0
  250. data/libnet/src/libnet_build_tcp.c +365 -0
  251. data/libnet/src/libnet_build_token_ring.c +193 -0
  252. data/libnet/src/libnet_build_udp.c +111 -0
  253. data/libnet/src/libnet_build_vrrp.c +117 -0
  254. data/libnet/src/libnet_checksum.c +376 -0
  255. data/libnet/src/libnet_cq.c +395 -0
  256. data/libnet/src/libnet_crc.c +113 -0
  257. data/libnet/src/libnet_dll.c +47 -0
  258. data/libnet/src/libnet_error.c +55 -0
  259. data/libnet/src/libnet_if_addr.c +415 -0
  260. data/libnet/src/libnet_init.c +234 -0
  261. data/libnet/src/libnet_internal.c +310 -0
  262. data/libnet/src/libnet_link_bpf.c +348 -0
  263. data/libnet/src/libnet_link_dlpi.c +785 -0
  264. data/libnet/src/libnet_link_linux.c +310 -0
  265. data/libnet/src/libnet_link_nit.c +125 -0
  266. data/libnet/src/libnet_link_none.c +66 -0
  267. data/libnet/src/libnet_link_pf.c +179 -0
  268. data/libnet/src/libnet_link_snit.c +149 -0
  269. data/libnet/src/libnet_link_snoop.c +166 -0
  270. data/libnet/src/libnet_link_win32.c +346 -0
  271. data/libnet/src/libnet_pblock.c +511 -0
  272. data/libnet/src/libnet_port_list.c +295 -0
  273. data/libnet/src/libnet_prand.c +106 -0
  274. data/libnet/src/libnet_raw.c +257 -0
  275. data/libnet/src/libnet_resolve.c +414 -0
  276. data/libnet/src/libnet_version.c +54 -0
  277. data/libnet/src/libnet_write.c +502 -0
  278. data/libnet/version.h.in +6 -0
  279. data/libnet/win32/CVS/Entries +15 -0
  280. data/libnet/win32/CVS/Repository +1 -0
  281. data/libnet/win32/CVS/Root +1 -0
  282. data/libnet/win32/Libnet-1.1.1-2002.sln +77 -0
  283. data/libnet/win32/Libnet-1.1.1-2003.ncb +0 -0
  284. data/libnet/win32/Libnet-1.1.1-2003.sln +84 -0
  285. data/libnet/win32/Libnet-1.1.1-2003.suo +0 -0
  286. data/libnet/win32/Libnet-1.1.1.vcproj +311 -0
  287. data/libnet/win32/Libnet-latest.ncb +0 -0
  288. data/libnet/win32/Libnet-latest.opt +0 -0
  289. data/libnet/win32/Libnet-latest.sln +77 -0
  290. data/libnet/win32/Libnet-latest.suo +0 -0
  291. data/libnet/win32/Libnet-latest.vcproj +311 -0
  292. data/libnet/win32/Libnet.dsp +337 -0
  293. data/libnet/win32/Libnet.dsw +32 -0
  294. data/libnet/win32/README.txt +57 -0
  295. data/libnet/win32/libnet_dll.def +164 -0
  296. data/test/tc_arp.rb +169 -0
  297. data/test/tc_class.rb +219 -0
  298. data/test/tc_ethernet.rb +97 -0
  299. data/test/tc_header.rb +163 -0
  300. data/test/tc_init.rb +25 -0
  301. data/test/tc_ipv4.rb +219 -0
  302. data/test/tc_ipv6.rb +235 -0
  303. data/test/tc_udp.rb +229 -0
  304. data/test/tc_vlan.rb +118 -0
  305. data/test/ts_all.rb +15 -0
  306. metadata +401 -0
@@ -0,0 +1,502 @@
1
+ /*
2
+ * $Id: libnet_write.c,v 1.13 2004/02/20 18:53:50 mike Exp $
3
+ *
4
+ * libnet
5
+ * libnet_write.c - writes a prebuilt packet to the network
6
+ *
7
+ * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
8
+ * All rights reserved.
9
+ * win32 specific code
10
+ * Copyright (c) 2002 - 2003 Roberto Larcher <roberto.larcher@libero.it>
11
+ *
12
+ * Redistribution and use in source and binary forms, with or without
13
+ * modification, are permitted provided that the following conditions
14
+ * are met:
15
+ * 1. Redistributions of source code must retain the above copyright
16
+ * notice, this list of conditions and the following disclaimer.
17
+ * 2. Redistributions in binary form must reproduce the above copyright
18
+ * notice, this list of conditions and the following disclaimer in the
19
+ * documentation and/or other materials provided with the distribution.
20
+ *
21
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
22
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
25
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
+ * SUCH DAMAGE.
32
+ *
33
+ */
34
+
35
+ #if (HAVE_CONFIG_H)
36
+ #include "../include/config.h"
37
+ #endif
38
+ #if (!(_WIN32) || (__CYGWIN__))
39
+ #include "../include/libnet.h"
40
+ #else
41
+ #include "../include/win32/libnet.h"
42
+ #include "../include/win32/config.h"
43
+ #include "packet32.h"
44
+ #include "Ntddndis.h"
45
+ #endif
46
+
47
+ int
48
+ libnet_open_socket(libnet_t *l)
49
+ {
50
+ if (l == NULL) {
51
+ return -1;
52
+ }
53
+
54
+ switch (l->injection_type)
55
+ {
56
+ case LIBNET_LINK:
57
+ case LIBNET_LINK_ADV:
58
+ if (libnet_select_device(l) == -1)
59
+ {
60
+ return -1;
61
+ }
62
+ if (libnet_open_link(l) == -1)
63
+ {
64
+ return -1;
65
+ }
66
+ break;
67
+ case LIBNET_RAW4:
68
+ case LIBNET_RAW4_ADV:
69
+ if (libnet_open_raw4(l) == -1)
70
+ {
71
+ return -1;
72
+ }
73
+ break;
74
+ case LIBNET_RAW6:
75
+ case LIBNET_RAW6_ADV:
76
+ if (libnet_open_raw6(l) == -1)
77
+ {
78
+ return -1;
79
+ }
80
+ break;
81
+ default:
82
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
83
+ "%s(): unsupported injection type\n", __func__);
84
+ return -1;
85
+ break;
86
+ }
87
+
88
+ return 1;
89
+ }
90
+
91
+ int
92
+ libnet_write(libnet_t *l)
93
+ {
94
+ int c;
95
+ u_int32_t len;
96
+ u_int8_t *packet = NULL;
97
+
98
+ /* corey: move check for UID/EUID of 0 from libnet_init() to here */
99
+ if (getuid() && geteuid())
100
+ {
101
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
102
+ "%s(): UID or EUID of 0 required\n", __func__);
103
+ return -1;
104
+ }
105
+
106
+ if (l == NULL)
107
+ {
108
+ return (-1);
109
+ }
110
+
111
+ /* corey: open socket if necessary */
112
+ if (l->fd == -1) {
113
+ if (libnet_open_socket(l) == -1) {
114
+ return -1;
115
+ }
116
+ }
117
+
118
+ c = libnet_pblock_coalesce(l, &packet, &len);
119
+ if (c == - 1)
120
+ {
121
+ /* err msg set in libnet_pblock_coalesce() */
122
+ return (-1);
123
+ }
124
+
125
+ /* assume error */
126
+ c = -1;
127
+ switch (l->injection_type)
128
+ {
129
+ case LIBNET_RAW4:
130
+ case LIBNET_RAW4_ADV:
131
+ if (len > LIBNET_MAX_PACKET)
132
+ {
133
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
134
+ "%s(): packet is too large (%d bytes)\n",
135
+ __func__, len);
136
+ goto done;
137
+ }
138
+ c = libnet_write_raw_ipv4(l, packet, len);
139
+ break;
140
+ case LIBNET_RAW6:
141
+ case LIBNET_RAW6_ADV:
142
+ c = libnet_write_raw_ipv6(l, packet, len);
143
+ break;
144
+ case LIBNET_LINK:
145
+ case LIBNET_LINK_ADV:
146
+ c = libnet_write_link(l, packet, len);
147
+ break;
148
+ default:
149
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
150
+ "%s(): unsuported injection type\n", __func__);
151
+ goto done;
152
+ }
153
+
154
+ /* do statistics */
155
+ if (c == len)
156
+ {
157
+ l->stats.packets_sent++;
158
+ l->stats.bytes_written += c;
159
+ }
160
+ else
161
+ {
162
+ l->stats.packet_errors++;
163
+ /*
164
+ * XXX - we probably should have a way to retrieve the number of
165
+ * bytes actually written (since we might have written something).
166
+ */
167
+ if (c > 0)
168
+ {
169
+ l->stats.bytes_written += c;
170
+ }
171
+ }
172
+ done:
173
+ /*
174
+ * Restore original pointer address so free won't complain about a
175
+ * modified chunk pointer.
176
+ */
177
+ if (l->aligner > 0)
178
+ {
179
+ packet = packet - l->aligner;
180
+ }
181
+ free(packet);
182
+ return (c);
183
+ }
184
+
185
+ #if defined (__WIN32__)
186
+ libnet_ptag_t
187
+ libnet_win32_build_fake_ethernet(u_int8_t *dst, u_int8_t *src, u_int16_t type,
188
+ u_int8_t *payload, u_int32_t payload_s, u_int8_t *packet, libnet_t *l,
189
+ libnet_ptag_t ptag)
190
+ {
191
+ struct libnet_ethernet_hdr eth_hdr;
192
+
193
+ if (!packet)
194
+ {
195
+ return (-1);
196
+ }
197
+
198
+ memset(&eth_hdr, 0, sizeof(eth_hdr));
199
+ eth_hdr.ether_type = htons(type);
200
+ memcpy(eth_hdr.ether_dhost, dst, ETHER_ADDR_LEN); /* destination address */
201
+ memcpy(eth_hdr.ether_shost, src, ETHER_ADDR_LEN); /* source address */
202
+
203
+ if (payload && payload_s)
204
+ {
205
+ /*
206
+ * Unchecked runtime error for buf + ETH_H payload to be greater than
207
+ * the allocated heap memory.
208
+ */
209
+ memcpy(packet + LIBNET_ETH_H, payload, payload_s);
210
+ }
211
+ memcpy(packet, &eth_hdr, sizeof(eth_hdr));
212
+ return (1);
213
+ }
214
+
215
+ libnet_ptag_t
216
+ libnet_win32_build_fake_token(u_int8_t *dst, u_int8_t *src, u_int16_t type,
217
+ u_int8_t *payload, u_int32_t payload_s, u_int8_t *packet, libnet_t *l,
218
+ libnet_ptag_t ptag)
219
+ {
220
+ struct libnet_token_ring_hdr token_ring_hdr;
221
+
222
+ if (!packet)
223
+ {
224
+ return (-1);
225
+ }
226
+
227
+ memset(&token_ring_hdr, 0, sizeof(token_ring_hdr));
228
+ token_ring_hdr.token_ring_access_control = 0x10;
229
+ token_ring_hdr.token_ring_frame_control = 0x40;
230
+ token_ring_hdr.token_ring_llc_dsap = 0xaa;
231
+ token_ring_hdr.token_ring_llc_ssap = 0xaa;
232
+ token_ring_hdr.token_ring_llc_control_field = 0x03;
233
+ token_ring_hdr.token_ring_type = htons(type);
234
+ memcpy(token_ring_hdr.token_ring_dhost, dst, ETHER_ADDR_LEN);
235
+ memcpy(token_ring_hdr.token_ring_shost, libnet_get_hwaddr(l),
236
+ ETHER_ADDR_LEN);
237
+
238
+ if (payload && payload_s)
239
+ {
240
+ /*
241
+ * Unchecked runtime error for buf + ETH_H payload to be greater than
242
+ * the allocated heap memory.
243
+ */
244
+ memcpy(packet + LIBNET_TOKEN_RING_H, payload, payload_s);
245
+ }
246
+ memcpy(packet, &token_ring_hdr, sizeof(token_ring_hdr));
247
+ return (1);
248
+ }
249
+
250
+
251
+ int
252
+ libnet_win32_write_raw_ipv4(libnet_t *l, u_int8_t *payload, u_int32_t payload_s)
253
+ {
254
+ static BYTE dst[ETHER_ADDR_LEN];
255
+ static BYTE src[ETHER_ADDR_LEN];
256
+
257
+ u_int8_t *packet = NULL;
258
+ u_int32_t packet_s;
259
+
260
+ LPPACKET lpPacket = NULL;
261
+ DWORD remoteip = 0;
262
+ DWORD BytesTransfered;
263
+ NetType type;
264
+ struct libnet_ipv4_hdr *ip_hdr = NULL;
265
+
266
+ memset(dst, 0, sizeof(dst));
267
+ memset(src, 0, sizeof(src));
268
+
269
+ packet_s = payload_s + l->link_offset;
270
+ packet = (u_int8_t *)malloc(packet_s);
271
+ if (packet == NULL)
272
+ {
273
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
274
+ "%s(): failed to allocate packet\n", __func__);
275
+ return (-1);
276
+ }
277
+
278
+ /* we have to do the IP checksum */
279
+ if (libnet_do_checksum(l, payload, IPPROTO_IP, LIBNET_IPV4_H) == -1)
280
+ {
281
+ /* error msg set in libnet_do_checksum */
282
+ return (-1);
283
+ }
284
+
285
+ /* MACs, IPs and other stuff... */
286
+ ip_hdr = (struct libnet_ipv4_hdr *)payload;
287
+ memcpy(src, libnet_get_hwaddr(l), sizeof(src));
288
+ remoteip = ip_hdr->ip_dst.S_un.S_addr;
289
+
290
+ /* check if the remote station is the local station */
291
+ if (remoteip == libnet_get_ipaddr4(l))
292
+ {
293
+ memcpy(dst, src, sizeof(dst));
294
+ }
295
+ else
296
+ {
297
+ memcpy(dst, libnet_win32_get_remote_mac(l, remoteip), sizeof(dst));
298
+ }
299
+
300
+ PacketGetNetType(l->lpAdapter, &type);
301
+
302
+ switch(type.LinkType)
303
+ {
304
+ case NdisMedium802_3:
305
+ libnet_win32_build_fake_ethernet(dst, src, ETHERTYPE_IP, payload,
306
+ payload_s, packet, l , 0);
307
+ break;
308
+ case NdisMedium802_5:
309
+ libnet_win32_build_fake_token(dst, src, ETHERTYPE_IP, payload,
310
+ payload_s, packet, l, 0);
311
+ break;
312
+ case NdisMediumFddi:
313
+ break;
314
+ case NdisMediumWan:
315
+ case NdisMediumAtm:
316
+ case NdisMediumArcnet878_2:
317
+ default:
318
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
319
+ "%s(): network type (%d) is not supported\n", __func__,
320
+ type.LinkType);
321
+ return (-1);
322
+ break;
323
+ }
324
+
325
+ BytesTransfered = -1;
326
+ if ((lpPacket = PacketAllocatePacket()) == NULL)
327
+ {
328
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
329
+ "%s(): failed to allocate the LPPACKET structure\n", __func__);
330
+ return (-1);
331
+ }
332
+
333
+ PacketInitPacket(lpPacket, packet, packet_s);
334
+
335
+ /* PacketSendPacket returns a BOOLEAN */
336
+ if (PacketSendPacket(l->lpAdapter, lpPacket, TRUE))
337
+ {
338
+ BytesTransfered = packet_s;
339
+ }
340
+
341
+ PacketFreePacket(lpPacket);
342
+ free(packet);
343
+
344
+ return (BytesTransfered);
345
+ }
346
+
347
+ int
348
+ libnet_write_raw_ipv4(libnet_t *l, u_int8_t *packet, u_int32_t size)
349
+ {
350
+ return (libnet_win32_write_raw_ipv4(l, packet, size));
351
+ }
352
+
353
+ int
354
+ libnet_write_raw_ipv6(libnet_t *l, u_int8_t *packet, u_int32_t size)
355
+ {
356
+ /* no difference in win32 */
357
+ return (libnet_write_raw_ipv4(l, packet, size));
358
+ }
359
+
360
+ #else /* __WIN32__ */
361
+
362
+ int
363
+ libnet_write_raw_ipv4(libnet_t *l, u_int8_t *packet, u_int32_t size)
364
+ {
365
+ int c;
366
+ struct sockaddr_in sin;
367
+ struct libnet_ipv4_hdr *ip_hdr;
368
+
369
+ /* corey: move check for UID/EUID of 0 from libnet_init() to here */
370
+ if (getuid() && geteuid())
371
+ {
372
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
373
+ "%s(): UID or EUID of 0 required\n", __func__);
374
+ return -1;
375
+ }
376
+
377
+ if (l == NULL)
378
+ {
379
+ return (-1);
380
+ }
381
+
382
+ /* corey: open socket if necessary */
383
+ if (l->fd == -1) {
384
+ if (libnet_open_socket(l) == -1) {
385
+ return -1;
386
+ }
387
+ }
388
+
389
+ ip_hdr = (struct libnet_ipv4_hdr *)packet;
390
+
391
+ #if (LIBNET_BSD_BYTE_SWAP)
392
+ /*
393
+ * For link access, we don't need to worry about the inconsistencies of
394
+ * certain BSD kernels. However, raw socket nuances abound. Certain
395
+ * BSD implmentations require the ip_len and ip_off fields to be in host
396
+ * byte order.
397
+ */
398
+ ip_hdr->ip_len = FIX(ip_hdr->ip_len);
399
+ ip_hdr->ip_off = FIX(ip_hdr->ip_off);
400
+ #endif /* LIBNET_BSD_BYTE_SWAP */
401
+
402
+ memset(&sin, 0, sizeof(sin));
403
+ sin.sin_family = AF_INET;
404
+ sin.sin_addr.s_addr = ip_hdr->ip_dst.s_addr;
405
+ #if (__WIN32__)
406
+ /* set port for TCP */
407
+ /*
408
+ * XXX - should first check to see if there's a pblock for a TCP
409
+ * header, if not we can use a dummy value for the port.
410
+ */
411
+ if (ip_hdr->ip_p == 6)
412
+ {
413
+ struct libnet_tcp_hdr *tcph_p =
414
+ (struct libnet_tcp_hdr *)(packet + (ip_hdr->ip_hl << 2));
415
+ sin.sin_port = tcph_p->th_dport;
416
+ }
417
+ /* set port for UDP */
418
+ /*
419
+ * XXX - should first check to see if there's a pblock for a UDP
420
+ * header, if not we can use a dummy value for the port.
421
+ */
422
+ else if (ip_hdr->ip_p == 17)
423
+ {
424
+ struct libnet_udp_hdr *udph_p =
425
+ (struct libnet_udp_hdr *)(packet + (ip_hdr->ip_hl << 2));
426
+ sin.sin_port = udph_p->uh_dport;
427
+ }
428
+ #endif /* __WIN32__ */
429
+
430
+ c = sendto(l->fd, packet, size, 0, (struct sockaddr *)&sin,
431
+ sizeof(struct sockaddr));
432
+
433
+ #if (LIBNET_BSD_BYTE_SWAP)
434
+ ip_hdr->ip_len = UNFIX(ip_hdr->ip_len);
435
+ ip_hdr->ip_off = UNFIX(ip_hdr->ip_off);
436
+ #endif /* LIBNET_BSD_BYTE_SWAP */
437
+
438
+ if (c != size)
439
+ {
440
+ #if !(__WIN32__)
441
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
442
+ "%s(): %d bytes written (%s)\n", __func__, c,
443
+ strerror(errno));
444
+ #else /* __WIN32__ */
445
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
446
+ "%s(): %d bytes written (%d)\n", __func__, c,
447
+ WSAGetLastError());
448
+ #endif /* !__WIN32__ */
449
+ }
450
+ return (c);
451
+ }
452
+
453
+ int
454
+ libnet_write_raw_ipv6(libnet_t *l, u_int8_t *packet, u_int32_t size)
455
+ {
456
+ #if defined HAVE_SOLARIS && !defined HAVE_SOLARIS_IPV6
457
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, "%s(): no IPv6 support\n",
458
+ __func__, strerror(errno));
459
+ return (-1);
460
+ }
461
+ #else
462
+ int c;
463
+ struct sockaddr_in6 sin;
464
+ struct libnet_ipv6_hdr *ip_hdr;
465
+
466
+ if (l == NULL)
467
+ {
468
+ return (-1);
469
+ }
470
+
471
+ /* corey: open socket if necessary */
472
+ if (l->fd == -1) {
473
+ if (libnet_open_socket(l) == -1) {
474
+ return -1;
475
+ }
476
+ }
477
+
478
+ ip_hdr = (struct libnet_ipv6_hdr *)packet;
479
+
480
+ memset(&sin, 0, sizeof(sin));
481
+ sin.sin6_family = AF_INET6;
482
+ memcpy(sin.sin6_addr.s6_addr, ip_hdr->ip_dst.libnet_s6_addr,
483
+ sizeof(ip_hdr->ip_dst.libnet_s6_addr));
484
+
485
+ c = sendto(l->fd, packet, size, 0, (struct sockaddr *)&sin, sizeof(sin));
486
+ if (c != size)
487
+ {
488
+ #if !(__WIN32__)
489
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
490
+ "%s(): %d bytes written (%s)\n", __func__, c,
491
+ strerror(errno));
492
+ #else /* __WIN32__ */
493
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
494
+ "%s(): %d bytes written (%d)\n", __func__, c,
495
+ WSAGetLastError());
496
+ #endif /* !__WIN32__ */
497
+ }
498
+ return (c);
499
+ }
500
+ #endif
501
+ #endif
502
+ /* EOF */
@@ -0,0 +1,6 @@
1
+ /*
2
+ * $Id: version.h.in,v 1.1.1.1 2003/06/26 21:55:10 route Exp $
3
+ * @configure_input@
4
+ */
5
+
6
+ #define VERSION "@LIBNET_VERSION@"
@@ -0,0 +1,15 @@
1
+ /Libnet-1.1.1-2002.sln/1.1/Tue Sep 16 17:00:47 2003//
2
+ /Libnet-1.1.1-2003.sln/1.2/Tue Oct 21 04:15:15 2003//
3
+ /Libnet-latest.ncb/1.3/Tue Sep 16 17:00:47 2003/-kb/
4
+ /Libnet-latest.opt/1.1/Wed Sep 10 18:30:37 2003/-kb/
5
+ /Libnet-latest.sln/1.3/Wed Sep 10 18:30:37 2003//
6
+ /Libnet-latest.suo/1.3/Tue Sep 16 17:00:47 2003/-kb/
7
+ /Libnet.dsp/1.2/Wed Oct 22 21:19:30 2003//
8
+ /Libnet.dsw/1.2/Tue Oct 21 04:14:28 2003//
9
+ /README.txt/1.2/Tue Oct 21 18:54:06 2003//
10
+ /Libnet-latest.vcproj/1.4/Wed Jan 21 21:37:18 2004//
11
+ /Libnet-1.1.1-2003.ncb/1.4/Thu Mar 4 21:34:53 2004/-kb/
12
+ /Libnet-1.1.1-2003.suo/1.4/Thu Mar 4 21:34:53 2004/-kb/
13
+ /Libnet-1.1.1.vcproj/1.5/Thu Mar 4 21:34:53 2004//
14
+ /libnet_dll.def/1.7/Thu Mar 4 21:34:53 2004//
15
+ D
@@ -0,0 +1 @@
1
+ /usr/local/CVS/libnet/win32
@@ -0,0 +1 @@
1
+ mike@66.234.207.232:/usr/local/CVS
@@ -0,0 +1,77 @@
1
+ Microsoft Visual Studio Solution File, Format Version 7.00
2
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Libnet-latest-006", "Libnet-latest.vcproj", "{6A0551E1-E416-4125-BCC0-F18F2D601806}"
3
+ EndProject
4
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arp", "..\sample\win32\arp\arp.vcproj", "{8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}"
5
+ EndProject
6
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdp", "..\sample\win32\cdp\cdp.vcproj", "{8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}"
7
+ EndProject
8
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dhcp_discover", "..\sample\win32\dhcp_discover\dhcp_discover.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
9
+ EndProject
10
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "get_addr", "..\sample\win32\get_addr\get_addr.vcproj", "{DA921F29-B6BE-4E55-9040-B6DD434F1E43}"
11
+ EndProject
12
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icmp_echo_cq", "..\sample\win32\icmp_echo_cq\icmp_echo_cq.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
13
+ EndProject
14
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcp1", "..\sample\win32\tcp1\tcp1.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
15
+ EndProject
16
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "udp1", "..\sample\win32\udp1\udp1.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
17
+ EndProject
18
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dns", "..\sample\win32\dns\dns.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
19
+ EndProject
20
+ Global
21
+ GlobalSection(SolutionConfiguration) = preSolution
22
+ ConfigName.0 = Debug
23
+ ConfigName.1 = Release
24
+ EndGlobalSection
25
+ GlobalSection(ProjectDependencies) = postSolution
26
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
27
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
28
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
29
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
30
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
31
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
32
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
33
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.0 = {6A0551E1-E416-4125-BCC0-F18F2D601806}
34
+ EndGlobalSection
35
+ GlobalSection(ProjectConfiguration) = postSolution
36
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Debug.ActiveCfg = Debug|Win32
37
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Debug.Build.0 = Debug|Win32
38
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Release.ActiveCfg = Debug|Win32
39
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Release.Build.0 = Debug|Win32
40
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.ActiveCfg = Debug|Win32
41
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.Build.0 = Debug|Win32
42
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.ActiveCfg = Release|Win32
43
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.Build.0 = Release|Win32
44
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.ActiveCfg = Debug|Win32
45
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.Build.0 = Debug|Win32
46
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.ActiveCfg = Release|Win32
47
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.Build.0 = Release|Win32
48
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
49
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
50
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
51
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
52
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Debug.ActiveCfg = Debug|Win32
53
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Debug.Build.0 = Debug|Win32
54
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Release.ActiveCfg = Release|Win32
55
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Release.Build.0 = Release|Win32
56
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
57
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
58
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
59
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
60
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
61
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
62
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
63
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
64
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
65
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
66
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
67
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
68
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
69
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
70
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
71
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
72
+ EndGlobalSection
73
+ GlobalSection(ExtensibilityGlobals) = postSolution
74
+ EndGlobalSection
75
+ GlobalSection(ExtensibilityAddIns) = postSolution
76
+ EndGlobalSection
77
+ EndGlobal
Binary file
@@ -0,0 +1,84 @@
1
+ Microsoft Visual Studio Solution File, Format Version 8.00
2
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arp", "..\sample\win32\arp\arp.vcproj", "{8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}"
3
+ ProjectSection(ProjectDependencies) = postProject
4
+ {6A0551E1-E416-4125-BCC0-F18F2D601806} = {6A0551E1-E416-4125-BCC0-F18F2D601806}
5
+ EndProjectSection
6
+ EndProject
7
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdp", "..\sample\win32\cdp\cdp.vcproj", "{8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}"
8
+ ProjectSection(ProjectDependencies) = postProject
9
+ {6A0551E1-E416-4125-BCC0-F18F2D601806} = {6A0551E1-E416-4125-BCC0-F18F2D601806}
10
+ EndProjectSection
11
+ EndProject
12
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dhcp_discover", "..\sample\win32\dhcp_discover\dhcp_discover.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
13
+ ProjectSection(ProjectDependencies) = postProject
14
+ {6A0551E1-E416-4125-BCC0-F18F2D601806} = {6A0551E1-E416-4125-BCC0-F18F2D601806}
15
+ EndProjectSection
16
+ EndProject
17
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "get_addr", "..\sample\win32\get_addr\get_addr.vcproj", "{DA921F29-B6BE-4E55-9040-B6DD434F1E43}"
18
+ ProjectSection(ProjectDependencies) = postProject
19
+ {6A0551E1-E416-4125-BCC0-F18F2D601806} = {6A0551E1-E416-4125-BCC0-F18F2D601806}
20
+ EndProjectSection
21
+ EndProject
22
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icmp_echo_cq", "..\sample\win32\icmp_echo_cq\icmp_echo_cq.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
23
+ ProjectSection(ProjectDependencies) = postProject
24
+ {6A0551E1-E416-4125-BCC0-F18F2D601806} = {6A0551E1-E416-4125-BCC0-F18F2D601806}
25
+ EndProjectSection
26
+ EndProject
27
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcp1", "..\sample\win32\tcp1\tcp1.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
28
+ ProjectSection(ProjectDependencies) = postProject
29
+ {6A0551E1-E416-4125-BCC0-F18F2D601806} = {6A0551E1-E416-4125-BCC0-F18F2D601806}
30
+ EndProjectSection
31
+ EndProject
32
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "udp1", "..\sample\win32\udp1\udp1.vcproj", "{482A29C5-AAD2-478A-AE7B-089BE39F25B4}"
33
+ ProjectSection(ProjectDependencies) = postProject
34
+ {6A0551E1-E416-4125-BCC0-F18F2D601806} = {6A0551E1-E416-4125-BCC0-F18F2D601806}
35
+ EndProjectSection
36
+ EndProject
37
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Libnet-1.1.1", "Libnet-1.1.1.vcproj", "{6A0551E1-E416-4125-BCC0-F18F2D601806}"
38
+ ProjectSection(ProjectDependencies) = postProject
39
+ EndProjectSection
40
+ EndProject
41
+ Global
42
+ GlobalSection(SolutionConfiguration) = preSolution
43
+ Debug = Debug
44
+ Release = Release
45
+ EndGlobalSection
46
+ GlobalSection(ProjectConfiguration) = postSolution
47
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.ActiveCfg = Debug|Win32
48
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.Build.0 = Debug|Win32
49
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.ActiveCfg = Release|Win32
50
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.Build.0 = Release|Win32
51
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.ActiveCfg = Debug|Win32
52
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Debug.Build.0 = Debug|Win32
53
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.ActiveCfg = Release|Win32
54
+ {8DB5763E-7AA2-43BE-9D7A-1F4138DEA904}.Release.Build.0 = Release|Win32
55
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
56
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
57
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
58
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
59
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Debug.ActiveCfg = Debug|Win32
60
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Debug.Build.0 = Debug|Win32
61
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Release.ActiveCfg = Release|Win32
62
+ {DA921F29-B6BE-4E55-9040-B6DD434F1E43}.Release.Build.0 = Release|Win32
63
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
64
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
65
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
66
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
67
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
68
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
69
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
70
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
71
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.ActiveCfg = Debug|Win32
72
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Debug.Build.0 = Debug|Win32
73
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.ActiveCfg = Release|Win32
74
+ {482A29C5-AAD2-478A-AE7B-089BE39F25B4}.Release.Build.0 = Release|Win32
75
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Debug.ActiveCfg = Debug|Win32
76
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Debug.Build.0 = Debug|Win32
77
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Release.ActiveCfg = Release|Win32
78
+ {6A0551E1-E416-4125-BCC0-F18F2D601806}.Release.Build.0 = Release|Win32
79
+ EndGlobalSection
80
+ GlobalSection(ExtensibilityGlobals) = postSolution
81
+ EndGlobalSection
82
+ GlobalSection(ExtensibilityAddIns) = postSolution
83
+ EndGlobalSection
84
+ EndGlobal
Binary file