1libnet-functions.h(3) libnet Programmers Guide libnet-functions.h(3)
2
3
4
6 libnet-functions.h - libnet exported function prototypes
7
8
10 Functions
11 LIBNET_API libnet_t * libnet_init (int injection_type, const char
12 *device, char *err_buf)
13 LIBNET_API void libnet_destroy (libnet_t *l)
14 LIBNET_API void libnet_clear_packet (libnet_t *l)
15 LIBNET_API void libnet_stats (libnet_t *l, struct libnet_stats *ls)
16 LIBNET_API int libnet_getfd (libnet_t *l)
17 LIBNET_API const char * libnet_getdevice (libnet_t *l)
18 LIBNET_API uint8_t * libnet_getpbuf (libnet_t *l, libnet_ptag_t ptag)
19 LIBNET_API uint32_t libnet_getpbuf_size (libnet_t *l, libnet_ptag_t
20 ptag)
21 LIBNET_API char * libnet_geterror (libnet_t *l)
22 LIBNET_API uint32_t libnet_getpacket_size (libnet_t *l)
23 LIBNET_API int libnet_seed_prand (libnet_t *l)
24 LIBNET_API uint32_t libnet_get_prand (int mod)
25 LIBNET_API int libnet_toggle_checksum (libnet_t *l, libnet_ptag_t ptag,
26 int mode)
27 LIBNET_API char * libnet_addr2name4 (uint32_t in, uint8_t use_name)
28 LIBNET_API uint32_t libnet_name2addr4 (libnet_t *l, const char
29 *host_name, uint8_t use_name)
30 LIBNET_API int libnet_in6_is_error (struct libnet_in6_addr addr)
31 LIBNET_API struct libnet_in6_addr libnet_name2addr6 (libnet_t *l, const
32 char *host_name, uint8_t use_name)
33 LIBNET_API void libnet_addr2name6_r (struct libnet_in6_addr addr,
34 uint8_t use_name, char *host_name, int host_name_len)
35 LIBNET_API int libnet_plist_chain_new (libnet_t *l, libnet_plist_t
36 **plist, char *token_list)
37 LIBNET_API int libnet_plist_chain_next_pair (libnet_plist_t *plist,
38 uint16_t *bport, uint16_t *eport)
39 LIBNET_API int libnet_plist_chain_dump (libnet_plist_t *plist)
40 LIBNET_API char * libnet_plist_chain_dump_string (libnet_plist_t
41 *plist)
42 LIBNET_API int libnet_plist_chain_free (libnet_plist_t *plist)
43 LIBNET_API libnet_ptag_t libnet_build_802_1q (const uint8_t *dst, const
44 uint8_t *src, uint16_t tpi, uint8_t priority, uint8_t cfi, uint16_t
45 vlan_id, uint16_t len_proto, const uint8_t *payload, uint32_t
46 payload_s, libnet_t *l, libnet_ptag_t ptag)
47 LIBNET_API libnet_ptag_t libnet_build_802_1x (uint8_t eap_ver, uint8_t
48 eap_type, uint16_t length, const uint8_t *payload, uint32_t
49 payload_s, libnet_t *l, libnet_ptag_t ptag)
50 LIBNET_API libnet_ptag_t libnet_build_802_2 (uint8_t dsap, uint8_t
51 ssap, uint8_t control, const uint8_t *payload, uint32_t payload_s,
52 libnet_t *l, libnet_ptag_t ptag)
53 LIBNET_API libnet_ptag_t libnet_build_802_2snap (uint8_t dsap, uint8_t
54 ssap, uint8_t control, uint8_t *oui, uint16_t type, const uint8_t
55 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
56 LIBNET_API libnet_ptag_t libnet_build_802_3 (const uint8_t *dst, const
57 uint8_t *src, uint16_t len, const uint8_t *payload, uint32_t
58 payload_s, libnet_t *l, libnet_ptag_t ptag)
59 LIBNET_API libnet_ptag_t libnet_build_ethernet (const uint8_t *dst,
60 const uint8_t *src, uint16_t type, const uint8_t *payload, uint32_t
61 payload_s, libnet_t *l, libnet_ptag_t ptag)
62 LIBNET_API libnet_ptag_t libnet_autobuild_ethernet (const uint8_t *dst,
63 uint16_t type, libnet_t *l)
64 LIBNET_API libnet_ptag_t libnet_build_fddi (uint8_t fc, const uint8_t
65 *dst, const uint8_t *src, uint8_t dsap, uint8_t ssap, uint8_t cf,
66 const uint8_t *oui, uint16_t type, const uint8_t *payload, uint32_t
67 payload_s, libnet_t *l, libnet_ptag_t ptag)
68 LIBNET_API libnet_ptag_t libnet_autobuild_fddi (uint8_t fc, const
69 uint8_t *dst, uint8_t dsap, uint8_t ssap, uint8_t cf, const uint8_t
70 *oui, uint16_t type, libnet_t *l)
71 LIBNET_API libnet_ptag_t libnet_build_arp (uint16_t hrd, uint16_t pro,
72 uint8_t hln, uint8_t pln, uint16_t op, const uint8_t *sha, const
73 uint8_t *spa, const uint8_t *tha, const uint8_t *tpa, const uint8_t
74 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
75 LIBNET_API libnet_ptag_t libnet_autobuild_arp (uint16_t op, const
76 uint8_t *sha, const uint8_t *spa, const uint8_t *tha, const uint8_t
77 *tpa, libnet_t *l)
78 LIBNET_API libnet_ptag_t libnet_build_tcp (uint16_t sp, uint16_t dp,
79 uint32_t seq, uint32_t ack, uint8_t control, uint16_t win, uint16_t
80 sum, uint16_t urg, uint16_t len, const uint8_t *payload, uint32_t
81 payload_s, libnet_t *l, libnet_ptag_t ptag)
82 LIBNET_API libnet_ptag_t libnet_build_tcp_options (const uint8_t
83 *options, uint32_t options_s, libnet_t *l, libnet_ptag_t ptag)
84 LIBNET_API libnet_ptag_t libnet_build_udp (uint16_t sp, uint16_t dp,
85 uint16_t len, uint16_t sum, const uint8_t *payload, uint32_t
86 payload_s, libnet_t *l, libnet_ptag_t ptag)
87 LIBNET_API libnet_ptag_t libnet_build_cdp (uint8_t version, uint8_t
88 ttl, uint16_t sum, uint16_t type, uint16_t value_s, const uint8_t
89 *value, const uint8_t *payload, uint32_t payload_s, libnet_t *l,
90 libnet_ptag_t ptag)
91 LIBNET_API libnet_ptag_t libnet_build_icmpv4_echo (uint8_t type,
92 uint8_t code, uint16_t sum, uint16_t id, uint16_t seq, const
93 uint8_t *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t
94 ptag)
95 LIBNET_API libnet_ptag_t libnet_build_icmpv4_mask (uint8_t type,
96 uint8_t code, uint16_t sum, uint16_t id, uint16_t seq, uint32_t
97 mask, const uint8_t *payload, uint32_t payload_s, libnet_t *l,
98 libnet_ptag_t ptag)
99 LIBNET_API libnet_ptag_t libnet_build_icmpv4_unreach (uint8_t type,
100 uint8_t code, uint16_t sum, const uint8_t *payload, uint32_t
101 payload_s, libnet_t *l, libnet_ptag_t ptag)
102 LIBNET_API libnet_ptag_t libnet_build_icmpv4_redirect (uint8_t type,
103 uint8_t code, uint16_t sum, uint32_t gateway, const uint8_t
104 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
105 LIBNET_API libnet_ptag_t libnet_build_icmpv4_timeexceed (uint8_t type,
106 uint8_t code, uint16_t sum, const uint8_t *payload, uint32_t
107 payload_s, libnet_t *l, libnet_ptag_t ptag)
108 LIBNET_API libnet_ptag_t libnet_build_icmpv4_timestamp (uint8_t type,
109 uint8_t code, uint16_t sum, uint16_t id, uint16_t seq, uint32_t
110 otime, uint32_t rtime, uint32_t ttime, const uint8_t *payload,
111 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
112 LIBNET_API libnet_ptag_t libnet_build_icmpv6_echo (uint8_t type,
113 uint8_t code, uint16_t sum, uint16_t id, uint16_t seq, uint8_t
114 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
115 LIBNET_API libnet_ptag_t libnet_build_icmpv6_unreach (uint8_t type,
116 uint8_t code, uint16_t sum, uint8_t *payload, uint32_t payload_s,
117 libnet_t *l, libnet_ptag_t ptag)
118 LIBNET_API libnet_ptag_t libnet_build_icmpv6_ndp_nsol (uint8_t type,
119 uint8_t code, uint16_t sum, struct libnet_in6_addr target, uint8_t
120 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
121 LIBNET_API libnet_ptag_t libnet_build_icmpv6_ndp_nadv (uint8_t type,
122 uint8_t code, uint16_t sum, uint32_t flags, struct libnet_in6_addr
123 target, uint8_t *payload, uint32_t payload_s, libnet_t *l,
124 libnet_ptag_t ptag)
125 LIBNET_API libnet_ptag_t libnet_build_icmpv6_ndp_opt (uint8_t type,
126 uint8_t *option, uint32_t option_s, libnet_t *l, libnet_ptag_t
127 ptag)
128 LIBNET_API libnet_ptag_t libnet_build_igmp (uint8_t type, uint8_t
129 reserved, uint16_t sum, uint32_t ip, const uint8_t *payload,
130 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
131 LIBNET_API libnet_ptag_t libnet_build_ipv4 (uint16_t ip_len, uint8_t
132 tos, uint16_t id, uint16_t frag, uint8_t ttl, uint8_t prot,
133 uint16_t sum, uint32_t src, uint32_t dst, const uint8_t *payload,
134 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
135 LIBNET_API libnet_ptag_t libnet_build_ipv4_options (const uint8_t
136 *options, uint32_t options_s, libnet_t *l, libnet_ptag_t ptag)
137 LIBNET_API libnet_ptag_t libnet_autobuild_ipv4 (uint16_t len, uint8_t
138 prot, uint32_t dst, libnet_t *l)
139 LIBNET_API libnet_ptag_t libnet_build_ipv6 (uint8_t tc, uint32_t fl,
140 uint16_t len, uint8_t nh, uint8_t hl, struct libnet_in6_addr src,
141 struct libnet_in6_addr dst, const uint8_t *payload, uint32_t
142 payload_s, libnet_t *l, libnet_ptag_t ptag)
143 LIBNET_API libnet_ptag_t libnet_build_ipv6_frag (uint8_t nh, uint8_t
144 reserved, uint16_t frag, uint32_t id, const uint8_t *payload,
145 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
146 LIBNET_API libnet_ptag_t libnet_build_ipv6_routing (uint8_t nh, uint8_t
147 len, uint8_t rtype, uint8_t segments, const uint8_t *payload,
148 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
149 LIBNET_API libnet_ptag_t libnet_build_ipv6_destopts (uint8_t nh,
150 uint8_t len, const uint8_t *payload, uint32_t payload_s, libnet_t
151 *l, libnet_ptag_t ptag)
152 LIBNET_API libnet_ptag_t libnet_build_ipv6_hbhopts (uint8_t nh, uint8_t
153 len, const uint8_t *payload, uint32_t payload_s, libnet_t *l,
154 libnet_ptag_t ptag)
155 LIBNET_API libnet_ptag_t libnet_autobuild_ipv6 (uint16_t len, uint8_t
156 nh, struct libnet_in6_addr dst, libnet_t *l, libnet_ptag_t ptag)
157 LIBNET_API libnet_ptag_t libnet_build_isl (uint8_t *dhost, uint8_t
158 type, uint8_t user, uint8_t *shost, uint16_t len, const uint8_t
159 *snap, uint16_t vid, uint16_t portindex, uint16_t reserved, const
160 uint8_t *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t
161 ptag)
162 LIBNET_API libnet_ptag_t libnet_build_ipsec_esp_hdr (uint32_t spi,
163 uint32_t seq, uint32_t iv, const uint8_t *payload, uint32_t
164 payload_s, libnet_t *l, libnet_ptag_t ptag)
165 LIBNET_API libnet_ptag_t libnet_build_ipsec_esp_ftr (uint8_t len,
166 uint8_t nh, int8_t *auth, const uint8_t *payload, uint32_t
167 payload_s, libnet_t *l, libnet_ptag_t ptag)
168 LIBNET_API libnet_ptag_t libnet_build_ipsec_ah (uint8_t nh, uint8_t
169 len, uint16_t res, uint32_t spi, uint32_t seq, uint32_t auth, const
170 uint8_t *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t
171 ptag)
172 LIBNET_API libnet_ptag_t libnet_build_dnsv4 (uint16_t h_len, uint16_t
173 id, uint16_t flags, uint16_t num_q, uint16_t num_anws_rr, uint16_t
174 num_auth_rr, uint16_t num_addi_rr, const uint8_t *payload, uint32_t
175 payload_s, libnet_t *l, libnet_ptag_t ptag)
176 LIBNET_API libnet_ptag_t libnet_build_rip (uint8_t cmd, uint8_t
177 version, uint16_t rd, uint16_t af, uint16_t rt, uint32_t addr,
178 uint32_t mask, uint32_t next_hop, uint32_t metric, const uint8_t
179 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
180 LIBNET_API libnet_ptag_t libnet_build_rpc_call (uint32_t rm, uint32_t
181 xid, uint32_t prog_num, uint32_t prog_vers, uint32_t procedure,
182 uint32_t cflavor, uint32_t clength, uint8_t *cdata, uint32_t
183 vflavor, uint32_t vlength, const uint8_t *vdata, const uint8_t
184 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
185 LIBNET_API libnet_ptag_t libnet_build_stp_conf (uint16_t id, uint8_t
186 version, uint8_t bpdu_type, uint8_t flags, const uint8_t *root_id,
187 uint32_t root_pc, const uint8_t *bridge_id, uint16_t port_id,
188 uint16_t message_age, uint16_t max_age, uint16_t hello_time,
189 uint16_t f_delay, const uint8_t *payload, uint32_t payload_s,
190 libnet_t *l, libnet_ptag_t ptag)
191 LIBNET_API libnet_ptag_t libnet_build_stp_tcn (uint16_t id, uint8_t
192 version, uint8_t bpdu_type, const uint8_t *payload, uint32_t
193 payload_s, libnet_t *l, libnet_ptag_t ptag)
194 LIBNET_API libnet_ptag_t libnet_build_token_ring (uint8_t ac, uint8_t
195 fc, const uint8_t *dst, const uint8_t *src, uint8_t dsap, uint8_t
196 ssap, uint8_t cf, const uint8_t *oui, uint16_t type, const uint8_t
197 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
198 LIBNET_API libnet_ptag_t libnet_autobuild_token_ring (uint8_t ac,
199 uint8_t fc, const uint8_t *dst, uint8_t dsap, uint8_t ssap, uint8_t
200 cf, const uint8_t *oui, uint16_t type, libnet_t *l)
201 LIBNET_API libnet_ptag_t libnet_build_vrrp (uint8_t version, uint8_t
202 type, uint8_t vrouter_id, uint8_t priority, uint8_t ip_count,
203 uint8_t auth_type, uint8_t advert_int, uint16_t sum, const uint8_t
204 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
205 LIBNET_API libnet_ptag_t libnet_build_mpls (uint32_t label, uint8_t
206 experimental, uint8_t bos, uint8_t ttl, const uint8_t *payload,
207 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
208 LIBNET_API libnet_ptag_t libnet_build_ntp (uint8_t leap_indicator,
209 uint8_t version, uint8_t mode, uint8_t stratum, uint8_t poll,
210 uint8_t precision, uint16_t delay_int, uint16_t delay_frac,
211 uint16_t dispersion_int, uint16_t dispersion_frac, uint32_t
212 reference_id, uint32_t ref_ts_int, uint32_t ref_ts_frac, uint32_t
213 orig_ts_int, uint32_t orig_ts_frac, uint32_t rec_ts_int, uint32_t
214 rec_ts_frac, uint32_t xmt_ts_int, uint32_t xmt_ts_frac, const
215 uint8_t *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t
216 ptag)
217 LIBNET_API libnet_ptag_t libnet_build_ospfv2 (uint16_t len, uint8_t
218 type, uint32_t rtr_id, uint32_t area_id, uint16_t sum, uint16_t
219 autype, const uint8_t *payload, uint32_t payload_s, libnet_t *l,
220 libnet_ptag_t ptag)
221 LIBNET_API libnet_ptag_t libnet_build_ospfv2_hello (uint32_t netmask,
222 uint16_t interval, uint8_t opts, uint8_t priority, uint32_t
223 dead_int, uint32_t des_rtr, uint32_t bkup_rtr, const uint8_t
224 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
225 libnet_ptag_t libnet_build_ospfv2_hello_neighbor (uint32_t netmask,
226 uint16_t interval, uint8_t opts, uint8_t priority, uint32_t
227 dead_int, uint32_t des_rtr, uint32_t bkup_rtr, uint32_t neighbor,
228 const uint8_t *payload, uint32_t payload_s, libnet_t *l,
229 libnet_ptag_t ptag)
230 LIBNET_API libnet_ptag_t libnet_build_ospfv2_dbd (uint16_t dgram_len,
231 uint8_t opts, uint8_t type, uint32_t seqnum, const uint8_t
232 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
233 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsr (uint32_t type,
234 uint32_t lsid, uint32_t advrtr, const uint8_t *payload, uint32_t
235 payload_s, libnet_t *l, libnet_ptag_t ptag)
236 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsu (uint32_t num, const
237 uint8_t *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t
238 ptag)
239 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa (uint16_t age, uint8_t
240 opts, uint8_t type, uint32_t lsid, uint32_t advrtr, uint32_t
241 seqnum, uint16_t sum, uint16_t len, const uint8_t *payload,
242 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
243 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_rtr (uint16_t flags,
244 uint16_t num, uint32_t id, uint32_t data, uint8_t type, uint8_t
245 tos, uint16_t metric, const uint8_t *payload, uint32_t payload_s,
246 libnet_t *l, libnet_ptag_t ptag)
247 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_net (uint32_t nmask,
248 uint32_t rtrid, const uint8_t *payload, uint32_t payload_s,
249 libnet_t *l, libnet_ptag_t ptag)
250 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_sum (uint32_t nmask,
251 uint32_t metric, uint32_t tos, const uint8_t *payload, uint32_t
252 payload_s, libnet_t *l, libnet_ptag_t ptag)
253 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_as (uint32_t nmask,
254 uint32_t metric, uint32_t fwdaddr, uint32_t tag, const uint8_t
255 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
256 LIBNET_API libnet_ptag_t libnet_build_data (const uint8_t *payload,
257 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
258 LIBNET_API libnet_ptag_t libnet_build_dhcpv4 (uint8_t opcode, uint8_t
259 htype, uint8_t hlen, uint8_t hopcount, uint32_t xid, uint16_t secs,
260 uint16_t flags, uint32_t cip, uint32_t yip, uint32_t sip, uint32_t
261 gip, const uint8_t *chaddr, const char *sname, const char *file,
262 const uint8_t *payload, uint32_t payload_s, libnet_t *l,
263 libnet_ptag_t ptag)
264 LIBNET_API libnet_ptag_t libnet_build_bootpv4 (uint8_t opcode, uint8_t
265 htype, uint8_t hlen, uint8_t hopcount, uint32_t xid, uint16_t secs,
266 uint16_t flags, uint32_t cip, uint32_t yip, uint32_t sip, uint32_t
267 gip, const uint8_t *chaddr, const char *sname, const char *file,
268 const uint8_t *payload, uint32_t payload_s, libnet_t *l,
269 libnet_ptag_t ptag)
270 LIBNET_API uint32_t libnet_getgre_length (uint16_t fv)
271 LIBNET_API libnet_ptag_t libnet_build_gre (uint16_t fv, uint16_t type,
272 uint16_t sum, uint16_t offset, uint32_t key, uint32_t seq, uint16_t
273 len, const uint8_t *payload, uint32_t payload_s, libnet_t *l,
274 libnet_ptag_t ptag)
275 LIBNET_API libnet_ptag_t libnet_build_egre (uint16_t fv, uint16_t type,
276 uint16_t sum, uint16_t offset, uint32_t key, uint32_t seq, uint16_t
277 len, const uint8_t *payload, uint32_t payload_s, libnet_t *l,
278 libnet_ptag_t ptag)
279 LIBNET_API libnet_ptag_t libnet_build_gre_sre (uint16_t af, uint8_t
280 offset, uint8_t length, uint8_t *routing, const uint8_t *payload,
281 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
282 LIBNET_API libnet_ptag_t libnet_build_gre_last_sre (libnet_t *l,
283 libnet_ptag_t ptag)
284 LIBNET_API libnet_ptag_t libnet_build_bgp4_header (uint8_t
285 marker[LIBNET_BGP4_MARKER_SIZE], uint16_t len, uint8_t type, const
286 uint8_t *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t
287 ptag)
288 LIBNET_API libnet_ptag_t libnet_build_bgp4_open (uint8_t version,
289 uint16_t src_as, uint16_t hold_time, uint32_t bgp_id, uint8_t
290 opt_len, const uint8_t *payload, uint32_t payload_s, libnet_t *l,
291 libnet_ptag_t ptag)
292 LIBNET_API libnet_ptag_t libnet_build_bgp4_update (uint16_t
293 unfeasible_rt_len, const uint8_t *withdrawn_rt, uint16_t
294 total_path_attr_len, const uint8_t *path_attributes, uint16_t
295 info_len, uint8_t *reachability_info, const uint8_t *payload,
296 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
297 LIBNET_API libnet_ptag_t libnet_build_bgp4_notification (uint8_t
298 err_code, uint8_t err_subcode, const uint8_t *payload, uint32_t
299 payload_s, libnet_t *l, libnet_ptag_t ptag)
300 LIBNET_API libnet_ptag_t libnet_build_sebek (uint32_t magic, uint16_t
301 version, uint16_t type, uint32_t counter, uint32_t time_sec,
302 uint32_t time_usec, uint32_t pid, uint32_t uid, uint32_t fd,
303 uint8_t cmd[SEBEK_CMD_LENGTH], uint32_t length, const uint8_t
304 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
305 LIBNET_API libnet_ptag_t libnet_build_hsrp (uint8_t version, uint8_t
306 opcode, uint8_t state, uint8_t hello_time, uint8_t hold_time,
307 uint8_t priority, uint8_t group, uint8_t reserved, uint8_t
308 authdata[HSRP_AUTHDATA_LENGTH], uint32_t virtual_ip, const uint8_t
309 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
310 LIBNET_API libnet_ptag_t libnet_build_link (const uint8_t *dst, const
311 uint8_t *src, const uint8_t *oui, uint16_t type, const uint8_t
312 *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
313 LIBNET_API libnet_ptag_t libnet_autobuild_link (const uint8_t *dst,
314 const uint8_t *oui, uint16_t type, libnet_t *l)
315 LIBNET_API int libnet_write (libnet_t *l)
316 LIBNET_API uint32_t libnet_get_ipaddr4 (libnet_t *l)
317 LIBNET_API struct libnet_in6_addr libnet_get_ipaddr6 (libnet_t *l)
318 LIBNET_API struct libnet_ether_addr * libnet_get_hwaddr (libnet_t *l)
319 LIBNET_API uint8_t * libnet_hex_aton (const char *s, int *len)
320 LIBNET_API const char * libnet_version (void)
321 LIBNET_API int libnet_adv_cull_packet (libnet_t *l, uint8_t **packet,
322 uint32_t *packet_s)
323 LIBNET_API int libnet_adv_cull_header (libnet_t *l, libnet_ptag_t ptag,
324 uint8_t **header, uint32_t *header_s)
325 LIBNET_API int libnet_adv_write_link (libnet_t *l, const uint8_t
326 *packet, uint32_t packet_s)
327 LIBNET_API int libnet_adv_write_raw_ipv4 (libnet_t *l, const uint8_t
328 *packet, uint32_t packet_s)
329 LIBNET_API void libnet_adv_free_packet (libnet_t *l, uint8_t *packet)
330 int libnet_cq_add (libnet_t *l, char *label)
331 LIBNET_API libnet_t * libnet_cq_remove (libnet_t *l)
332 LIBNET_API libnet_t * libnet_cq_remove_by_label (char *label)
333 LIBNET_API const char * libnet_cq_getlabel (libnet_t *l)
334 LIBNET_API libnet_t * libnet_cq_find_by_label (char *label)
335 LIBNET_API void libnet_cq_destroy (void)
336 LIBNET_API libnet_t * libnet_cq_head (void)
337 LIBNET_API int libnet_cq_last (void)
338 LIBNET_API libnet_t * libnet_cq_next (void)
339 LIBNET_API uint32_t libnet_cq_size (void)
340 LIBNET_API uint32_t libnet_cq_end_loop (void)
341 LIBNET_API void libnet_diag_dump_context (libnet_t *l)
342 LIBNET_API void libnet_diag_dump_pblock (libnet_t *l)
343 LIBNET_API char * libnet_diag_dump_pblock_type (uint8_t type)
344 void libnet_diag_dump_hex (const uint8_t *packet, uint32_t len, int
345 swap, FILE *stream)
346
348 libnet exported function prototypes
349
350
351
353 LIBNET_API char* libnet_addr2name4 (uint32_t in, uint8_t use_name)
354 Takes a network byte ordered IPv4 address and returns a pointer to
355 either a canonical DNS name (if it has one) or a string of dotted
356 decimals. This may incur a DNS lookup if the hostname and mode is set
357 to LIBNET_RESOLVE. If mode is set to LIBNET_DONT_RESOLVE, no DNS lookup
358 will be performed and the function will return a pointer to a dotted
359 decimal string. The function cannot fail -- if no canonical name
360 exists, it will fall back on returning a dotted decimal string. This
361 function is non-reentrant.
362
363 Parameters
364 in network byte ordered IPv4 address
365 use_name LIBNET_RESOLVE or LIBNET_DONT_RESOLVE
366
367 Returns
368 a pointer to presentation format string
369
370 LIBNET_API void libnet_addr2name6_r (struct libnet_in6_addr addr, uint8_t
371 use_name, char * host_name, int host_name_len)
372 Should document this baby right here.
373
374 LIBNET_API int libnet_adv_cull_header (libnet_t * l, libnet_ptag_t ptag,
375 uint8_t ** header, uint32_t * header_s)
376 [Advanced Interface] Pulls the header from the specified ptag from the
377 given libnet context. This function is part of the advanced interface
378 and is only available when libnet is initialized in advanced mode. If
379 the function fails libnet_geterror() can tell you why.
380
381 Parameters
382 l pointer to a libnet context
383 ptag the ptag referencing the header to pull
384 header will contain the header
385 header_s will contain the header size
386
387 Return values
388 1 on success
389 -1 on failure
390
391
392 LIBNET_API int libnet_adv_cull_packet (libnet_t * l, uint8_t ** packet,
393 uint32_t * packet_s)
394 [Advanced Interface] Yanks a prebuilt, wire-ready packet from the given
395 libnet context. If libnet was configured to do so (which it is by
396 default) the packet will have all checksums written in. This function
397 is part of the advanced interface and is only available when libnet is
398 initialized in advanced mode. It is important to note that the function
399 performs an implicit malloc() and a corresponding call to
400 libnet_adv_free_packet() should be made to free the memory packet
401 occupies. If the function fails libnet_geterror() can tell you why.
402
403 Parameters
404 l pointer to a libnet context
405 packet will contain the wire-ready packet
406 packet_s will contain the packet size
407
408 Return values
409 1 on success
410 -1 on failure
411
412
413 LIBNET_API void libnet_adv_free_packet (libnet_t * l, uint8_t * packet)
414 [Advanced Interface] Frees the memory allocated when
415 libnet_adv_cull_packet() is called.
416
417 Parameters
418 l pointer to a libnet context
419 packet a pointer to the packet to free
420
421 LIBNET_API int libnet_adv_write_link (libnet_t * l, const uint8_t * packet,
422 uint32_t packet_s)
423 [Advanced Interface] Writes a packet the network at the link layer.
424 This function is useful to write a packet that has been constructed by
425 hand by the application programmer or, more commonly, to write a packet
426 that has been returned by a call to libnet_adv_cull_packet(). This
427 function is part of the advanced interface and is only available when
428 libnet is initialized in advanced mode. If the function fails
429 libnet_geterror() can tell you why.
430
431 Parameters
432 l pointer to a libnet context
433 packet a pointer to the packet to inject
434 packet_s the size of the packet
435
436 Returns
437 the number of bytes written
438
439 Return values
440 -1 on failure
441
442 LIBNET_API int libnet_adv_write_raw_ipv4 (libnet_t * l, const uint8_t *
443 packet, uint32_t packet_s)
444 [Advanced Interface] Writes a packet the network at the raw socket
445 layer. This function is useful to write a packet that has been
446 constructed by hand by the application programmer or, more commonly, to
447 write a packet that has been returned by a call to
448 libnet_adv_cull_packet(). This function is part of the advanced
449 interface and is only available when libnet is initialized in advanced
450 mode. If the function fails libnet_geterror() can tell you why.
451
452 Parameters
453 l pointer to a libnet context
454 packet a pointer to the packet to inject
455 packet_s the size of the packet
456
457 Returns
458 the number of bytes written
459
460 Return values
461 -1 on failure
462
463 LIBNET_API libnet_ptag_t libnet_autobuild_arp (uint16_t op, const uint8_t *
464 sha, const uint8_t * spa, const uint8_t * tha, const uint8_t * tpa,
465 libnet_t * l)
466 Autouilds an Address Resolution Protocol (ARP) header. Depending on the
467 op value, the function builds one of several different types of RFC 826
468 or RFC 903 RARP packets.
469
470 Parameters
471 op ARP operation type
472 sha sender's hardware address
473 spa sender's protocol address
474 tha target hardware address
475 tpa target protocol address
476 l pointer to a libnet context
477
478 Returns
479 protocol tag value on success
480
481 Return values
482 -1 on error
483
484 LIBNET_API libnet_ptag_t libnet_autobuild_ethernet (const uint8_t * dst,
485 uint16_t type, libnet_t * l)
486 Autobuilds an Ethernet header. The RFC 894 Ethernet II header is almost
487 identical to the IEEE 802.3 header, with the exception that the field
488 immediately following the source address holds the layer 3 protocol (as
489 opposed to frame's length). You should only use this function when
490 libnet is initialized with the LIBNET_LINK interface.
491
492 Parameters
493 dst destination ethernet address
494 type upper layer protocol type
495 l pointer to a libnet context
496
497 Returns
498 protocol tag value on success
499
500 Return values
501 -1 on error
502
503 LIBNET_API libnet_ptag_t libnet_autobuild_fddi (uint8_t fc, const uint8_t *
504 dst, uint8_t dsap, uint8_t ssap, uint8_t cf, const uint8_t * oui,
505 uint16_t type, libnet_t * l)
506 Autobuilds a Fiber Distributed Data Interface (FDDI) header.
507
508 Parameters
509 fc class format and priority
510 dst destination fddi address
511 dsap destination service access point
512 ssap source service access point
513 cf cf
514 oui IEEE organizational code
515 type upper layer protocol
516 l pointer to a libnet context
517
518 Returns
519 protocol tag value on success
520
521 Return values
522 -1 on error
523
524 LIBNET_API libnet_ptag_t libnet_autobuild_ipv4 (uint16_t len, uint8_t prot,
525 uint32_t dst, libnet_t * l)
526 Autobuilds a version 4 Internet Protocol (IP) header. The function is
527 useful to build an IP header quickly when you do not need a granular
528 level of control. The function takes the same len, prot, and dst
529 arguments as libnet_build_ipv4(). The function does not accept a ptag
530 argument, but it does return a ptag. In other words, you can use it to
531 build a new IP header but not to modify an existing one.
532
533 Parameters
534 len total length of the IP packet including all subsequent data
535 prot upper layer protocol
536 dst destination IPv4 address (little endian)
537 l pointer to a libnet context
538
539 Returns
540 protocol tag value on success
541
542 Return values
543 -1 on error
544
545 LIBNET_API libnet_ptag_t libnet_autobuild_ipv6 (uint16_t len, uint8_t nh,
546 struct libnet_in6_addr dst, libnet_t * l, libnet_ptag_t ptag)
547 Autobuilds a version 6 RFC 2460 Internet Protocol (IP) header. The
548 function is useful to build an IP header quickly when you do not need a
549 granular level of control. The function takes the same len, nh, and dst
550 arguments as libnet_build_ipv4(). The function does not accept a ptag
551 argument, but it does return a ptag. In other words, you can use it to
552 build a new IP header but not to modify an existing one. This function
553 requires libnet_get_ipaddr6(), which is not yet implemented for Win32
554 platforms.
555
556 Parameters
557 len length
558 nh next header
559 dst destination IPv6 address
560 l pointer to a libnet context
561 ptag protocol tag to modify an existing header, 0 to build a new
562 one
563
564 Returns
565 protocol tag value on success
566
567 Return values
568 -1 on error
569
570 LIBNET_API libnet_ptag_t libnet_autobuild_link (const uint8_t * dst, const
571 uint8_t * oui, uint16_t type, libnet_t * l)
572 Automatically builds a link layer header for an initialized l. The
573 function determines the proper link layer header format from how l was
574 initialized. The function current supports Ethernet and Token Ring link
575 layers.
576
577 Parameters
578 dst the destination MAC address
579 oui Organizationally Unique Identifier (unused for Ethernet)
580 type the upper layer protocol type
581 l pointer to a libnet context
582
583 Returns
584 protocol tag value on success
585
586 Return values
587 -1 on error
588
589 LIBNET_API libnet_ptag_t libnet_autobuild_token_ring (uint8_t ac, uint8_t
590 fc, const uint8_t * dst, uint8_t dsap, uint8_t ssap, uint8_t cf, const
591 uint8_t * oui, uint16_t type, libnet_t * l)
592 Auto-builds a token ring header.
593
594 Parameters
595 ac access control
596 fc frame control
597 dst destination address
598 dsap destination service access point
599 ssap source service access point
600 cf control field
601 oui Organizationally Unique Identifier
602 type upper layer protocol type
603 l pointer to a libnet context
604
605 Returns
606 protocol tag value on success
607
608 Return values
609 -1 on error
610
611 LIBNET_API libnet_ptag_t libnet_build_802_1q (const uint8_t * dst, const
612 uint8_t * src, uint16_t tpi, uint8_t priority, uint8_t cfi, uint16_t
613 vlan_id, uint16_t len_proto, const uint8_t * payload, uint32_t
614 payload_s, libnet_t * l, libnet_ptag_t ptag)
616 The core of libnet is the platform-independent packet-building
617 functionality. These functions enable an application programmer to
618 build protocol headers (and data) in a simple and consistent manner
619 without having to worry (too much) about low-level network odds and
620 ends. Each libnet_build() function builds a piece of a packet
621 (generally a protocol header). While it is perfectly possible to build
622 an entire, ready-to-transmit packet with a single call to a
623 libnet_build() function, generally more than one builder-class function
624 call is required to construct a full packet. A complete wire-ready
625 packet generally consists of more than one piece. Every function that
626 builds a protocol header takes a series of arguments roughly
627 corresponding to the header values as they appear on the wire. This
628 process is intuitive but often makes for functions with huge prototypes
629 and large stack frames. One important thing to note is that you must
630 call these functions in order, corresponding to how they should appear
631 on the wire (from the highest protocol layer on down). This building
632 process is intuitive; it approximates what happens in an operating
633 system kernel. In other words, to build a Network Time Protocol (NTP)
634 packet by using the link-layer interface, the application programmer
635 would call the libnet_build() functions in the following order:
636
637 1. libnet_build_ntp()
638
639 2. libnet_build_udp()
640
641 3. libnet_build_ipv4()
642
643 4. libnet_build_ethernet() This ordering is essential for libnet 1.1.x
644 to properly link together the packet internally (previous libnet
645 versions did not have the requirement).
646
647 The Payload Interface
648 The payload interface specifies an optional way to include data
649 directly after the protocol header in question. You can use this
650 function for a variety of purposes, including the following:
651
652 • Including additional or arbitrary protocol header information that is
653 not available from a libnet interface
654
655 • Including a packet payload (data segment)
656
657 • Building another protocol header that is not available from a libnet
658 interface To employ the interface, the application programmer should
659 construct the i payload data and pass a const uint8_t * to this data
660 and its size to the desired libnet_build() function. Libnet handles
661 the rest.
662
663 It is important to note that some functions (notably the IPv6 builders)
664 do use the payload interface to specify variable length but ostensibly
665 non-optional data. See the individual libnet_build_ipv6*() functions
666 for more information.
667
668 Protocol Tags and Packet Builder Return Values
669 Libnet uses the protocol tag (ptag) to identify individual pieces of a
670 packet after being created. A new ptag results every time a
671 libnet_build() function with an empty (0) ptag argument completes
672 successfully. This new ptag now refers to the packet piece just
673 created. The application programmer's responsibility is to save this
674 value if he or she plans to modify this particular portion later on in
675 the program. If the application programmer needs to modify some portion
676 of that particular packet piece again, he or she calls the same
677 libnet_build() function specifying the saved ptag argument. Libnet then
678 searches for that packet piece and modifies it rather than creating a
679 new one. Upon failure for any reason, libnet_build() functions return
680 -1; libnet_geterror() tells you why. Builds an IEEE 802.1q VLAN tagging
681 header. Depending on the value of len_proto, the function wraps the
682 802.1q header inside either an IEEE 802.3 header or an RFC 894 Ethernet
683 II (DIX) header (both resulting in an 18-byte frame). If len is 1500 or
684 less, most receiving protocol stacks parse the frame as an IEEE 802.3
685 encapsulated frame. If len is one of the Ethernet type values, most
686 protocol stacks parse the frame as an RFC 894 Ethernet II encapsulated
687 frame. Note the length value is calculated without the 802.1q header of
688 18 bytes.
689
690 Parameters
691 dst pointer to a six byte source ethernet address
692 src pointer to a six byte destination ethernet address
693 tpi tag protocol identifier
694 priority priority
695 cfi canonical format indicator
696 vlan_id vlan identifier
697 len_proto length (802.3) protocol (Ethernet II)
698 payload optional payload or NULL
699 payload_s payload length or 0
700 l pointer to a libnet context
701 ptag protocol tag to modify an existing header, 0 to build a new
702 one
703
704 Returns
705 protocol tag value on success
706
707 Return values
708 -1 on error
709
710 LIBNET_API libnet_ptag_t libnet_build_802_1x (uint8_t eap_ver, uint8_t
711 eap_type, uint16_t length, const uint8_t * payload, uint32_t payload_s,
712 libnet_t * l, libnet_ptag_t ptag)
713 Builds an IEEE 802.1x extended authentication protocol header.
714
715 Parameters
716 eap_ver the EAP version
717 eap_type the EAP type
718 length frame length
719 payload optional payload or NULL
720 payload_s payload length or 0
721 l pointer to a libnet context
722 ptag protocol tag to modify an existing header, 0 to build a new
723 one
724
725 Returns
726 protocol tag value on success
727
728 Return values
729 -1 on error
730
731 LIBNET_API libnet_ptag_t libnet_build_802_2 (uint8_t dsap, uint8_t ssap,
732 uint8_t control, const uint8_t * payload, uint32_t payload_s, libnet_t
733 * l, libnet_ptag_t ptag)
734 Builds an IEEE 802.2 LLC header.
735
736 Parameters
737 dsap destination service access point
738 ssap source service access point
739 control control field
740 payload optional payload or NULL
741 payload_s payload length or 0
742 l pointer to a libnet context
743 ptag protocol tag to modify an existing header, 0 to build a new
744 one
745
746 Returns
747 protocol tag value on success
748
749 Return values
750 -1 on error
751
752 LIBNET_API libnet_ptag_t libnet_build_802_2snap (uint8_t dsap, uint8_t
753 ssap, uint8_t control, uint8_t * oui, uint16_t type, const uint8_t *
754 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
755 Builds an IEEE 802.2 LLC SNAP header.
756
757 Parameters
758 dsap destination service access point
759 ssap source service access point
760 control control field
761 oui Organizationally Unique Identifier
762 type upper layer protocol
763 payload optional payload or NULL
764 payload_s payload length or 0
765 l pointer to a libnet context
766 ptag protocol tag to modify an existing header, 0 to build a new
767 one
768
769 Returns
770 protocol tag value on success
771
772 Return values
773 -1 on error
774
775 LIBNET_API libnet_ptag_t libnet_build_802_3 (const uint8_t * dst, const
776 uint8_t * src, uint16_t len, const uint8_t * payload, uint32_t
777 payload_s, libnet_t * l, libnet_ptag_t ptag)
778 Builds an IEEE 802.3 header. The 802.3 header is almost identical to
779 the RFC 894 Ethernet II header, the exception being that the field
780 immediately following the source address holds the frame's length (as
781 opposed to the layer 3 protocol). You should only use this function
782 when libnet is initialized with the LIBNET_LINK interface.
783
784 Parameters
785 dst destination ethernet address
786 src source ethernet address
787 len frame length sans header
788 payload optional payload or NULL
789 payload_s payload length or 0
790 l pointer to a libnet context
791 ptag protocol tag to modify an existing header, 0 to build a new
792 one
793
794 Returns
795 protocol tag value on success
796
797 Return values
798 -1 on error
799
800 LIBNET_API libnet_ptag_t libnet_build_arp (uint16_t hrd, uint16_t pro,
801 uint8_t hln, uint8_t pln, uint16_t op, const uint8_t * sha, const
802 uint8_t * spa, const uint8_t * tha, const uint8_t * tpa, const uint8_t
803 * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
804 Builds an Address Resolution Protocol (ARP) header. Depending on the op
805 value, the function builds one of several different types of RFC 826 or
806 RFC 903 RARP packets.
807
808 Parameters
809 hrd hardware address format
810 pro protocol address format
811 hln hardware address length
812 pln protocol address length
813 op ARP operation type
814 sha sender's hardware address
815 spa sender's protocol address
816 tha target hardware address
817 tpa target protocol address
818 payload optional payload or NULL
819 payload_s payload length or 0
820 l pointer to a libnet context
821 ptag protocol tag to modify an existing header, 0 to build a new
822 one
823
824 Returns
825 protocol tag value on success
826
827 Return values
828 -1 on error
829
830 LIBNET_API libnet_ptag_t libnet_build_bgp4_header (uint8_t
831 marker[LIBNET_BGP4_MARKER_SIZE], uint16_t len, uint8_t type, const
832 uint8_t * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t
833 ptag)
834 Builds an RFC 1771 Border Gateway Protocol 4 (BGP-4) header. The
835 primary function of a BGP speaking system is to exchange network
836 reachability information with other BGP systems. This network
837 reachability information includes information on the list of Autonomous
838 Systems (ASs) that reachability information traverses. This information
839 is sufficient to construct a graph of AS connectivity from which
840 routing loops may be pruned and some policy decisions at the AS level
841 may be enforced. This function builds the base BGP header which is used
842 as a preamble before any other BGP header. For example, a BGP KEEPALIVE
843 message may be built with only this function, while an error
844 notification requires a subsequent call to
845 libnet_build_bgp4_notification.
846
847 Parameters
848 marker a value the receiver can predict (if the message type is not
849 BGP OPEN, or no authentication is used, these 16 bytes are normally
850 set as all ones)
851 len total length of the BGP message, including the header
852 type type code of the message (OPEN, UPDATE, NOTIFICATION or
853 KEEPALIVE)
854 payload optional payload or NULL
855 payload_s payload length or 0
856 l pointer to a libnet context
857 ptag protocol tag to modify an existing header, 0 to build a new
858 one
859
860 Returns
861 protocol tag value on success
862
863 Return values
864 -1 on error
865
866 LIBNET_API libnet_ptag_t libnet_build_bgp4_notification (uint8_t err_code,
867 uint8_t err_subcode, const uint8_t * payload, uint32_t payload_s,
868 libnet_t * l, libnet_ptag_t ptag)
869 Builds an RFC 1771 Border Gateway Protocol 4 (BGP-4) notification
870 header. A NOTIFICATION message is sent when an error condition is
871 detected. Specific error information may be passed through the payload
872 interface.
873
874 Parameters
875 err_code type of notification
876 err_subcode more specific information about the reported error.
877 payload optional payload or NULL
878 payload_s payload length or 0
879 l pointer to a libnet context
880 ptag protocol tag to modify an existing header, 0 to build a new
881 one
882
883 Returns
884 protocol tag value on success
885
886 Return values
887 -1 on error
888
889 LIBNET_API libnet_ptag_t libnet_build_bgp4_open (uint8_t version, uint16_t
890 src_as, uint16_t hold_time, uint32_t bgp_id, uint8_t opt_len, const
891 uint8_t * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t
892 ptag)
893 Builds an RFC 1771 Border Gateway Protocol 4 (BGP-4) OPEN header. This
894 is the first message sent by each side of a BGP connection. The
895 optional parameters options should be constructed using the payload
896 interface (see RFC 1771 for the options structures).
897
898 Parameters
899 version protocol version (should be set to 4)
900 src_as Autonomous System of the sender
901 hold_time used to compute the maximum allowed time between the
902 receipt of KEEPALIVE, and/or UPDATE messages by the sender
903 bgp_id BGP identifier of the sender
904 opt_len total length of the optional parameters field in bytes
905 payload optional payload or NULL
906 payload_s payload length or 0
907 l pointer to a libnet context
908 ptag protocol tag to modify an existing header, 0 to build a new
909 one
910
911 Returns
912 protocol tag value on success
913
914 Return values
915 -1 on error
916
917 LIBNET_API libnet_ptag_t libnet_build_bgp4_update (uint16_t
918 unfeasible_rt_len, const uint8_t * withdrawn_rt, uint16_t
919 total_path_attr_len, const uint8_t * path_attributes, uint16_t
920 info_len, uint8_t * reachability_info, const uint8_t * payload,
921 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
922 Builds an RFC 1771 Border Gateway Protocol 4 (BGP-4) update header.
923 Update messages are used to transfer routing information between BGP
924 peers.
925
926 Parameters
927 unfeasible_rt_len indicates the length of the (next) 'withdrawn
928 routes' field in bytes
929 withdrawn_rt list of IP addresses prefixes for the routes that are
930 being withdrawn; each IP address prefix is built as a 2-tuple
931 <length (1 byte), prefix (variable)>
932 total_path_attr_len indicates the length of the (next) 'path
933 attributes' field in bytes
934 path_attributes each attribute is a 3-tuple <type (2 bytes),
935 length, value>
936 info_len indicates the length of the (next) 'network layer
937 reachability information' field in bytes (needed for internal
938 memory size calculation)
939 reachability_info 2-tuples <length (1 byte), prefix (variable)>.
940 payload optional payload or NULL
941 payload_s payload length or 0
942 l pointer to a libnet context
943 ptag protocol tag to modify an existing header, 0 to build a new
944 one
945
946 Returns
947 protocol tag value on success
948
949 Return values
950 -1 on error
951
952 LIBNET_API libnet_ptag_t libnet_build_bootpv4 (uint8_t opcode, uint8_t
953 htype, uint8_t hlen, uint8_t hopcount, uint32_t xid, uint16_t secs,
954 uint16_t flags, uint32_t cip, uint32_t yip, uint32_t sip, uint32_t gip,
955 const uint8_t * chaddr, const char * sname, const char * file, const
956 uint8_t * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t
957 ptag)
958 Parameters
959 opcode
960 htype
961 hlen
962 hopcount
963 xid
964 secs
965 flags
966 cip
967 yip
968 sip
969 gip
970 chaddr client hardware address, length is hlen
971 sname server host name, a null terminated string
972 file boot file name, a null terminated string
973 payload optional payload or NULL
974 payload_s payload length or 0
975 l pointer to a libnet context
976 ptag protocol tag to modify an existing header, 0 to build a new
977 one
978
979 Returns
980 protocol tag value on success
981
982 Return values
983 -1 on error
984
985 LIBNET_API libnet_ptag_t libnet_build_cdp (uint8_t version, uint8_t ttl,
986 uint16_t sum, uint16_t type, uint16_t value_s, const uint8_t * value,
987 const uint8_t * payload, uint32_t payload_s, libnet_t * l,
988 libnet_ptag_t ptag)
989 Builds a Cisco Discovery Protocol (CDP) header. Cisco Systems designed
990 CDP to aid in the network management of adjacent Cisco devices. The CDP
991 protocol specifies data by using a type/length/value (TLV) setup. The
992 first TLV can specified by using the functions type, length, and value
993 arguments. To specify additional TLVs, the programmer could either use
994 the payload interface or libnet_build_data() to construct them.
995
996 Parameters
997 version CDP version
998 ttl time to live (time information should be cached by recipient)
999 sum checksum (0 for libnet to auto-fill)
1000 type type of data contained in value
1001 value_s length of value argument
1002 value the CDP information string
1003 payload optional payload or NULL
1004 payload_s payload length or 0
1005 l pointer to a libnet context
1006 ptag protocol tag to modify an existing header, 0 to build a new
1007 one
1008
1009 Returns
1010 protocol tag value on success
1011
1012 Return values
1013 -1 on error
1014
1015 LIBNET_API libnet_ptag_t libnet_build_data (const uint8_t * payload,
1016 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1017 Builds a generic libnet protocol header. This is useful for including
1018 an optional payload to a packet that might need to change repeatedly
1019 inside of a loop. This won't work for TCP or IP payload, they have
1020 special types (this is probably a bug).
1021
1022 Parameters
1023 payload optional payload or NULL
1024 payload_s payload length or 0
1025 l pointer to a libnet context
1026 ptag protocol tag to modify an existing header, 0 to build a new
1027 one
1028
1029 Returns
1030 protocol tag value on success
1031
1032 Return values
1033 -1 on error
1034
1035 LIBNET_API libnet_ptag_t libnet_build_dhcpv4 (uint8_t opcode, uint8_t
1036 htype, uint8_t hlen, uint8_t hopcount, uint32_t xid, uint16_t secs,
1037 uint16_t flags, uint32_t cip, uint32_t yip, uint32_t sip, uint32_t gip,
1038 const uint8_t * chaddr, const char * sname, const char * file, const
1039 uint8_t * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t
1040 ptag)
1041 Parameters
1042 opcode
1043 htype
1044 hlen
1045 hopcount
1046 xid
1047 secs
1048 flags
1049 cip
1050 yip
1051 sip
1052 gip
1053 chaddr client hardware address, length is hlen
1054 sname server host name, a null terminated string
1055 file boot file name, a null terminated string
1056 payload optional payload or NULL
1057 payload_s payload length or 0
1058 l pointer to a libnet context
1059 ptag protocol tag to modify an existing header, 0 to build a new
1060 one
1061
1062 Returns
1063 protocol tag value on success
1064
1065 Return values
1066 -1 on error
1067
1068 LIBNET_API libnet_ptag_t libnet_build_dnsv4 (uint16_t h_len, uint16_t id,
1069 uint16_t flags, uint16_t num_q, uint16_t num_anws_rr, uint16_t
1070 num_auth_rr, uint16_t num_addi_rr, const uint8_t * payload, uint32_t
1071 payload_s, libnet_t * l, libnet_ptag_t ptag)
1072 Builds an RFC 1035 version 4 DNS header. Additional DNS payload
1073 information should be specified using the payload interface.
1074
1075 Parameters
1076 h_len
1077 id DNS packet id
1078 flags control flags
1079 num_q number of questions
1080 num_anws_rr number of answer resource records
1081 num_auth_rr number of authority resource records
1082 num_addi_rr number of additional resource records
1083 payload optional payload or NULL
1084 payload_s payload length or 0
1085 l pointer to a libnet context
1086 ptag protocol tag to modify an existing header, 0 to build a new
1087 one
1088
1089 Returns
1090 protocol tag value on success
1091
1092 Return values
1093 -1 on error
1094
1095 LIBNET_API libnet_ptag_t libnet_build_egre (uint16_t fv, uint16_t type,
1096 uint16_t sum, uint16_t offset, uint32_t key, uint32_t seq, uint16_t
1097 len, const uint8_t * payload, uint32_t payload_s, libnet_t * l,
1098 libnet_ptag_t ptag)
1099 Generic Routing Encapsulation (GRE - RFC 1701) is used to encapsulate
1100 any protocol. Hence, the IP part of the packet is usually referred as
1101 'delivery header'. It is then followed by the GRE header and finally
1102 the encapsulated packet (IP or whatever). As GRE is very modular, the
1103 first GRE header describes the structure of the header, using bits and
1104 flag to specify which fields will be present in the header.
1105
1106 Parameters
1107 fv the 16 0 to 7: which fields are included in the header
1108 (checksum, seq. number, key, ...), bits 8 to 12: flag, bits 13 to
1109 15: version.
1110 type which protocol is encapsulated (PPP, IP, ...)
1111 sum checksum (0 for libnet to auto-fill).
1112 offset byte offset from the start of the routing field to the first
1113 byte of the SRE
1114 key inserted by the encapsulator to authenticate the source
1115 seq sequence number used by the receiver to sort the packets
1116 len size of the GRE packet
1117 payload optional payload or NULL
1118 payload_s payload length or 0
1119 l pointer to a libnet context
1120 ptag protocol tag to modify an existing header, 0 to build a new
1121 one
1122
1123 Returns
1124 protocol tag value on success
1125
1126 Return values
1127 -1 on error
1128
1129 LIBNET_API libnet_ptag_t libnet_build_ethernet (const uint8_t * dst, const
1130 uint8_t * src, uint16_t type, const uint8_t * payload, uint32_t
1131 payload_s, libnet_t * l, libnet_ptag_t ptag)
1132 Builds an Ethernet header. The RFC 894 Ethernet II header is almost
1133 identical to the IEEE 802.3 header, with the exception that the field
1134 immediately following the source address holds the layer 3 protocol (as
1135 opposed to frame's length). You should only use this function when
1136 libnet is initialized with the LIBNET_LINK interface.
1137
1138 Parameters
1139 dst destination ethernet address
1140 src source ethernet address
1141 type upper layer protocol type
1142 payload optional payload or NULL
1143 payload_s payload length or 0
1144 l pointer to a libnet context
1145 ptag protocol tag to modify an existing header, 0 to build a new
1146 one
1147
1148 Returns
1149 protocol tag value on success
1150
1151 Return values
1152 -1 on error
1153
1154 LIBNET_API libnet_ptag_t libnet_build_fddi (uint8_t fc, const uint8_t *
1155 dst, const uint8_t * src, uint8_t dsap, uint8_t ssap, uint8_t cf, const
1156 uint8_t * oui, uint16_t type, const uint8_t * payload, uint32_t
1157 payload_s, libnet_t * l, libnet_ptag_t ptag)
1158 Builds a Fiber Distributed Data Interface (FDDI) header.
1159
1160 Parameters
1161 fc class format and priority
1162 dst destination fddi address
1163 src source fddi address
1164 dsap destination service access point
1165 ssap source service access point
1166 cf cf
1167 oui 3 byte IEEE organizational code
1168 type upper layer protocol
1169 payload optional payload or NULL
1170 payload_s payload length or 0
1171 l pointer to a libnet context
1172 ptag protocol tag to modify an existing header, 0 to build a new
1173 one
1174
1175 Returns
1176 protocol tag value on success
1177
1178 Return values
1179 -1 on error
1180
1181 LIBNET_API libnet_ptag_t libnet_build_gre (uint16_t fv, uint16_t type,
1182 uint16_t sum, uint16_t offset, uint32_t key, uint32_t seq, uint16_t
1183 len, const uint8_t * payload, uint32_t payload_s, libnet_t * l,
1184 libnet_ptag_t ptag)
1185 Generic Routing Encapsulation (GRE - RFC 1701) is used to encapsulate
1186 any protocol. Hence, the IP part of the packet is usually referred as
1187 'delivery header'. It is then followed by the GRE header and finally
1188 the encapsulated packet (IP or whatever). As GRE is very modular, the
1189 first GRE header describes the structure of the header, using bits and
1190 flag to specify which fields will be present in the header.
1191
1192 Parameters
1193 fv the 16 0 to 7: which fields are included in the header
1194 (checksum, seq. number, key, ...), bits 8 to 12: flag, bits 13 to
1195 15: version.
1196 type which protocol is encapsulated (PPP, IP, ...)
1197 sum checksum (0 for libnet to auto-fill).
1198 offset byte offset from the start of the routing field to the first
1199 byte of the SRE
1200 key inserted by the encapsulator to authenticate the source
1201 seq sequence number used by the receiver to sort the packets
1202 len size of the GRE packet
1203 payload
1204 payload_s payload length or 0
1205 l pointer to a libnet context
1206 ptag protocol tag to modify an existing header, 0 to build a new
1207 one
1208
1209 Returns
1210 protocol tag value on success
1211
1212 Return values
1213 -1 on error
1214
1215 LIBNET_API libnet_ptag_t libnet_build_gre_last_sre (libnet_t * l,
1216 libnet_ptag_t ptag)
1217 Parameters
1218 l pointer to a libnet context
1219 ptag protocol tag to modify an existing header, 0 to build a new
1220 one
1221
1222 Returns
1223 protocol tag value on success
1224
1225 Return values
1226 -1 on error
1227
1228 LIBNET_API libnet_ptag_t libnet_build_gre_sre (uint16_t af, uint8_t offset,
1229 uint8_t length, uint8_t * routing, const uint8_t * payload, uint32_t
1230 payload_s, libnet_t * l, libnet_ptag_t ptag)
1231 Parameters
1232 af
1233 offset
1234 length
1235 routing
1236 payload optional payload or NULL
1237 payload_s payload length or 0
1238 l pointer to a libnet context
1239 ptag protocol tag to modify an existing header, 0 to build a new
1240 one
1241
1242 Returns
1243 protocol tag value on success
1244
1245 Return values
1246 -1 on error
1247
1248 LIBNET_API libnet_ptag_t libnet_build_hsrp (uint8_t version, uint8_t
1249 opcode, uint8_t state, uint8_t hello_time, uint8_t hold_time, uint8_t
1250 priority, uint8_t group, uint8_t reserved, uint8_t
1251 authdata[HSRP_AUTHDATA_LENGTH], uint32_t virtual_ip, const uint8_t *
1252 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1253 Builds a HSRP header. HSRP is a Cisco proprietary protocol defined in
1254 RFC 2281
1255
1256 Parameters
1257 version version of the HSRP messages
1258 opcode type of message
1259 state current state of the router
1260 hello_time period in seconds between hello messages
1261 hold_time seconds that the current hello message is valid
1262 priority priority for the election process
1263 group standby group
1264 reserved reserved field
1265 authdata password
1266 virtual_ip virtual ip address
1267 payload optional payload or NULL
1268 payload_s payload length or 0
1269 l pointer to a libnet context
1270 ptag protocol tag to modify an existing header, 0 to build a new
1271 one
1272
1273 Returns
1274 protocol tag value on success
1275
1276 Return values
1277 -1 on error
1278
1279 LIBNET_API libnet_ptag_t libnet_build_icmpv4_echo (uint8_t type, uint8_t
1280 code, uint16_t sum, uint16_t id, uint16_t seq, const uint8_t * payload,
1281 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1282 Builds an IP version 4 RFC 792 Internet Control Message Protocol (ICMP)
1283 echo request/reply header
1284
1285 Parameters
1286 type type of ICMP packet (should be ICMP_ECHOREPLY or ICMP_ECHO)
1287 code code of ICMP packet (should be 0)
1288 sum checksum (0 for libnet to auto-fill)
1289 id identification number
1290 seq packet sequence number
1291 payload optional payload or NULL
1292 payload_s payload length or 0
1293 l pointer to a libnet context
1294 ptag protocol tag to modify an existing header, 0 to build a new
1295 one
1296
1297 Returns
1298 protocol tag value on success
1299
1300 Return values
1301 -1 on error
1302
1303 LIBNET_API libnet_ptag_t libnet_build_icmpv4_mask (uint8_t type, uint8_t
1304 code, uint16_t sum, uint16_t id, uint16_t seq, uint32_t mask, const
1305 uint8_t * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t
1306 ptag)
1307 Builds an IP version 4 RFC 792 Internet Control Message Protocol (ICMP)
1308 IP netmask request/reply header.
1309
1310 Parameters
1311 type type of ICMP packet (should be ICMP_MASKREQ or ICMP_MASKREPLY)
1312 code code of ICMP packet (should be 0)
1313 sum checksum (0 for libnet to auto-fill)
1314 id identification number
1315 seq packet sequence number
1316 mask subnet mask
1317 payload optional payload or NULL
1318 payload_s payload length or 0
1319 l pointer to a libnet context
1320 ptag protocol tag to modify an existing header, 0 to build a new
1321 one
1322
1323 Returns
1324 protocol tag value on success
1325
1326 Return values
1327 -1 on error
1328
1329 LIBNET_API libnet_ptag_t libnet_build_icmpv4_redirect (uint8_t type,
1330 uint8_t code, uint16_t sum, uint32_t gateway, const uint8_t * payload,
1331 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1332 Builds an IP version 4 RFC 792 Internet Message Control Protocol (ICMP)
1333 redirect header. The IP header that caused the error message should be
1334 built by a previous call to libnet_build_ipv4().
1335
1336 Parameters
1337 type type of ICMP packet (should be ICMP_REDIRECT)
1338 code code of ICMP packet (should be one of the four redirect codes)
1339 sum checksum (0 for libnet to auto-fill)
1340 gateway
1341 payload optional payload or NULL
1342 payload_s payload length or 0
1343 l pointer to a libnet context
1344 ptag protocol tag to modify an existing header, 0 to build a new
1345 one
1346
1347 Returns
1348 protocol tag value on success
1349
1350 Return values
1351 -1 on error
1352
1353 LIBNET_API libnet_ptag_t libnet_build_icmpv4_timeexceed (uint8_t type,
1354 uint8_t code, uint16_t sum, const uint8_t * payload, uint32_t
1355 payload_s, libnet_t * l, libnet_ptag_t ptag)
1356 Builds an IP version 4 RFC 792 Internet Control Message Protocol (ICMP)
1357 time exceeded header. The IP header that caused the error message
1358 should be built by a previous call to libnet_build_ipv4().
1359
1360 Parameters
1361 type type of ICMP packet (should be ICMP_TIMXCEED)
1362 code code of ICMP packet (ICMP_TIMXCEED_INTRANS /
1363 ICMP_TIMXCEED_REASS)
1364 sum checksum (0 for libnet to auto-fill)
1365 payload optional payload or NULL
1366 payload optional payload or NULL
1367 payload_s payload length or 0
1368 l pointer to a libnet context
1369 ptag protocol tag to modify an existing header, 0 to build a new
1370 one
1371
1372 Returns
1373 protocol tag value on success
1374
1375 Return values
1376 -1 on error
1377
1378 LIBNET_API libnet_ptag_t libnet_build_icmpv4_timestamp (uint8_t type,
1379 uint8_t code, uint16_t sum, uint16_t id, uint16_t seq, uint32_t otime,
1380 uint32_t rtime, uint32_t ttime, const uint8_t * payload, uint32_t
1381 payload_s, libnet_t * l, libnet_ptag_t ptag)
1382 Builds an IP version 4 RFC 792 Internet Control Message Protocol (ICMP)
1383 timestamp request/reply header.
1384
1385 Parameters
1386 type type of ICMP packet (should be ICMP_TSTAMP or
1387 ICMP_TSTAMPREPLY)
1388 code code of ICMP packet (should be 0)
1389 sum checksum (0 for libnet to auto-fill)
1390 id identification number
1391 seq sequence number
1392 otime originate timestamp
1393 rtime receive timestamp
1394 ttime transmit timestamp
1395 payload optional payload or NULL
1396 payload_s payload length or 0
1397 l pointer to a libnet context
1398 ptag protocol tag to modify an existing header, 0 to build a new
1399 one
1400
1401 Returns
1402 protocol tag value on success
1403
1404 Return values
1405 -1 on error
1406
1407 LIBNET_API libnet_ptag_t libnet_build_icmpv4_unreach (uint8_t type, uint8_t
1408 code, uint16_t sum, const uint8_t * payload, uint32_t payload_s,
1409 libnet_t * l, libnet_ptag_t ptag)
1410 Builds an IP version 4 RFC 792 Internet Control Message Protocol (ICMP)
1411 unreachable header. The IP header that caused the error message should
1412 be built by a previous call to libnet_build_ipv4().
1413
1414 Parameters
1415 type type of ICMP packet (should be ICMP_UNREACH)
1416 code code of ICMP packet (should be one of the 16 unreachable
1417 codes)
1418 sum checksum (0 for libnet to auto-fill)
1419 payload optional payload or NULL
1420 payload_s payload length or 0
1421 l pointer to a libnet context
1422 ptag protocol tag to modify an existing header, 0 to build a new
1423 one
1424
1425 Returns
1426 protocol tag value on success
1427
1428 Return values
1429 -1 on error
1430
1431 LIBNET_API libnet_ptag_t libnet_build_icmpv6_echo (uint8_t type, uint8_t
1432 code, uint16_t sum, uint16_t id, uint16_t seq, uint8_t * payload,
1433 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1434 Builds an IP version 6 RFC 4443 Internet Control Message Protocol
1435 (ICMP) echo or echo reply header.
1436
1437 Parameters
1438 type type of ICMP packet (should be ICMP6_ECHO_REQUEST or
1439 ICMP6_ECHO_REPLY)
1440 code code of ICMP packet (should be zero)
1441 sum checksum (0 for libnet to auto-fill)
1442 id echo id number
1443 seq echo sequence number
1444 payload optional payload or NULL
1445 payload_s payload length or 0
1446 l pointer to a libnet context
1447 ptag protocol tag to modify an existing header, 0 to build a new
1448 one
1449
1450 Returns
1451 protocol tag value on success
1452
1453 Return values
1454 -1 on error
1455
1456 LIBNET_API libnet_ptag_t libnet_build_icmpv6_ndp_nadv (uint8_t type,
1457 uint8_t code, uint16_t sum, uint32_t flags, struct libnet_in6_addr
1458 target, uint8_t * payload, uint32_t payload_s, libnet_t * l,
1459 libnet_ptag_t ptag)
1460 Builds an IP version 6 RFC 2461 Internet Control Message Protocol
1461 (ICMP) NDP neighbour advertisement header. Could be used with
1462 libnet_build_icmpv6_ndp_opt() and ND_OPT_TARGET_LINKADDR.
1463
1464 Parameters
1465 type type of ICMP packet (should be ND_NEIGHBOR_ADVERT)
1466 code code of ICMP packet (should be zero)
1467 sum checksum (0 for libnet to auto-fill)
1468 flags should be a bitwise or of any applicable ND_NA_FLAG_* flags
1469 target target ipv6 address
1470 payload optional payload or NULL
1471 payload_s payload length or 0
1472 l pointer to a libnet context
1473 ptag protocol tag to modify an existing header, 0 to build a new
1474 one
1475
1476 Returns
1477 protocol tag value on success
1478
1479 Return values
1480 -1 on error
1481
1482 LIBNET_API libnet_ptag_t libnet_build_icmpv6_ndp_nsol (uint8_t type,
1483 uint8_t code, uint16_t sum, struct libnet_in6_addr target, uint8_t *
1484 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1485 Builds an IP version 6 RFC 2461 Internet Control Message Protocol
1486 (ICMP) NDP neighbour solicitation header. Could be used with
1487 libnet_build_icmpv6_ndp_opt() and ICMPV6_NDP_OPT_SLLA.
1488
1489 Parameters
1490 type type of ICMP packet (should be ND_NEIGHBOR_SOLICIT)
1491 code code of ICMP packet (should be zero)
1492 sum checksum (0 for libnet to auto-fill)
1493 target target ipv6 address
1494 payload optional payload or NULL
1495 payload_s payload length or 0
1496 l pointer to a libnet context
1497 ptag protocol tag to modify an existing header, 0 to build a new
1498 one
1499
1500 Returns
1501 protocol tag value on success
1502
1503 Return values
1504 -1 on error
1505
1506 LIBNET_API libnet_ptag_t libnet_build_icmpv6_ndp_opt (uint8_t type, uint8_t
1507 * option, uint32_t option_s, libnet_t * l, libnet_ptag_t ptag)
1508 Builds ICMPv6 NDP options.
1509
1510 Parameters
1511 type one of ND_OPT_* types
1512 option option data
1513 option_s size of option data (will be padded out to an 8-byte
1514 boundary)
1515 l pointer to a libnet context
1516 ptag protocol tag to modify an existing header, 0 to build a new
1517 one
1518
1519 Returns
1520 protocol tag value on success
1521
1522 Return values
1523 -1 on error
1524
1525 LIBNET_API libnet_ptag_t libnet_build_icmpv6_unreach (uint8_t type, uint8_t
1526 code, uint16_t sum, uint8_t * payload, uint32_t payload_s, libnet_t *
1527 l, libnet_ptag_t ptag)
1528 Builds an IP version 6 RFC 4443 Internet Control Message Protocol
1529 (ICMP) unreachable header. The IP header that caused the error message
1530 should be built by a previous call to libnet_build_ipv6().
1531
1532 Parameters
1533 type type of ICMP packet (should be ICMP6_DST_UNREACH)
1534 code code of ICMP packet (should be one of the 5
1535 ICMP6_DST_UNREACH_* codes)
1536 sum checksum (0 for libnet to auto-fill)
1537 payload optional payload or NULL
1538 payload_s payload length or 0
1539 l pointer to a libnet context
1540 ptag protocol tag to modify an existing header, 0 to build a new
1541 one
1542
1543 Returns
1544 protocol tag value on success
1545
1546 Return values
1547 -1 on error
1548
1549 LIBNET_API libnet_ptag_t libnet_build_igmp (uint8_t type, uint8_t reserved,
1550 uint16_t sum, uint32_t ip, const uint8_t * payload, uint32_t payload_s,
1551 libnet_t * l, libnet_ptag_t ptag)
1552 Builds an RFC 1112 Internet Group Membership Protocol (IGMP) header.
1553
1554 Parameters
1555 type packet type
1556 reserved (should be 0 for IGMPv1)
1557 sum checksum (0 for libnet to auto-fill)
1558 ip IPv4 address (in standard/network byte order)
1559 payload optional payload or NULL
1560 payload_s payload length or 0
1561 l pointer to a libnet context
1562 ptag protocol tag to modify an existing header, 0 to build a new
1563 one
1564
1565 Returns
1566 protocol tag value on success
1567
1568 Return values
1569 -1 on error
1570
1571 Note
1572
1573 LIBNET_API libnet_ptag_t libnet_build_ipsec_ah (uint8_t nh, uint8_t len,
1574 uint16_t res, uint32_t spi, uint32_t seq, uint32_t auth, const uint8_t
1575 * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1576 Builds an Internet Protocol Security Authentication header.
1577
1578 Parameters
1579 nh next header
1580 len payload length
1581 res reserved
1582 spi security parameter index
1583 seq sequence number
1584 auth authentication data
1585 payload optional payload or NULL
1586 payload_s payload length or 0
1587 l pointer to a libnet context
1588 ptag protocol tag to modify an existing header, 0 to build a new
1589 one
1590
1591 Returns
1592 protocol tag value on success
1593
1594 Return values
1595 -1 on error
1596
1597 LIBNET_API libnet_ptag_t libnet_build_ipsec_esp_ftr (uint8_t len, uint8_t
1598 nh, int8_t * auth, const uint8_t * payload, uint32_t payload_s,
1599 libnet_t * l, libnet_ptag_t ptag)
1600 Builds an Internet Protocol Security Encapsulating Security Payload
1601 footer.
1602
1603 Parameters
1604 len padding length
1605 nh next header
1606 auth authentication data
1607 payload optional payload or NULL
1608 payload_s payload length or 0
1609 l pointer to a libnet context
1610 ptag protocol tag to modify an existing header, 0 to build a new
1611 one
1612
1613 Returns
1614 protocol tag value on success
1615
1616 Return values
1617 -1 on error
1618
1619 LIBNET_API libnet_ptag_t libnet_build_ipsec_esp_hdr (uint32_t spi, uint32_t
1620 seq, uint32_t iv, const uint8_t * payload, uint32_t payload_s, libnet_t
1621 * l, libnet_ptag_t ptag)
1622 Builds an Internet Protocol Security Encapsulating Security Payload
1623 header.
1624
1625 Parameters
1626 spi security parameter index
1627 seq ESP sequence number
1628 iv initialization vector
1629 payload optional payload or NULL
1630 payload_s payload length or 0
1631 l pointer to a libnet context
1632 ptag protocol tag to modify an existing header, 0 to build a new
1633 one
1634
1635 Returns
1636 protocol tag value on success
1637
1638 Return values
1639 -1 on error
1640
1641 LIBNET_API libnet_ptag_t libnet_build_ipv4 (uint16_t ip_len, uint8_t tos,
1642 uint16_t id, uint16_t frag, uint8_t ttl, uint8_t prot, uint16_t sum,
1643 uint32_t src, uint32_t dst, const uint8_t * payload, uint32_t
1644 payload_s, libnet_t * l, libnet_ptag_t ptag)
1645 Builds a version 4 RFC 791 Internet Protocol (IP) header.
1646
1647 Parameters
1648 ip_len total length of the IP packet including all subsequent data
1649 (subsequent data includes any IP options and IP options padding)
1650 tos type of service bits
1651 id IP identification number
1652 frag fragmentation bits and offset
1653 ttl time to live in the network
1654 prot upper layer protocol
1655 sum checksum (0 for libnet to auto-fill)
1656 src source IPv4 address (little endian)
1657 dst destination IPv4 address (little endian)
1658 payload optional payload or NULL
1659 payload_s payload length or 0
1660 l pointer to a libnet context
1661 ptag protocol tag to modify an existing header, 0 to build a new
1662 one
1663
1664 Returns
1665 protocol tag value on success
1666
1667 Return values
1668 -1 on error
1669
1670 LIBNET_API libnet_ptag_t libnet_build_ipv4_options (const uint8_t *
1671 options, uint32_t options_s, libnet_t * l, libnet_ptag_t ptag)
1672 Builds an version 4 Internet Protocol (IP) options header. The function
1673 expects options to be a valid IP options string of size options_s, no
1674 larger than 40 bytes (the maximum size of an options string).
1675
1676 When building a chain, the options must be built, then the IPv4 header.
1677
1678 When updating a chain, if the block following the options is an IPv4
1679 header, it's total length and header length will be updated if the
1680 options block size changes.
1681
1682 Parameters
1683 options byte string of IP options (it will be padded up to be an
1684 integral multiple of 32-bit words).
1685 options_s length of options string
1686 l pointer to a libnet context
1687 ptag protocol tag to modify an existing header, 0 to build a new
1688 one
1689
1690 Returns
1691 protocol tag value on success
1692
1693 Return values
1694 -1 on error
1695
1696 LIBNET_API libnet_ptag_t libnet_build_ipv6 (uint8_t tc, uint32_t fl,
1697 uint16_t len, uint8_t nh, uint8_t hl, struct libnet_in6_addr src,
1698 struct libnet_in6_addr dst, const uint8_t * payload, uint32_t
1699 payload_s, libnet_t * l, libnet_ptag_t ptag)
1700 Builds a version 6 RFC 2460 Internet Protocol (IP) header.
1701
1702 Parameters
1703 tc traffic class
1704 fl flow label
1705 len total length of the IP packet
1706 nh next header
1707 hl hop limit
1708 src source IPv6 address
1709 dst destination IPv6 address
1710 payload optional payload or NULL
1711 payload_s payload length or 0
1712 l pointer to a libnet context
1713 ptag protocol tag to modify an existing header, 0 to build a new
1714 one
1715
1716 Returns
1717 protocol tag value on success
1718
1719 Return values
1720 -1 on error
1721
1722 LIBNET_API libnet_ptag_t libnet_build_ipv6_destopts (uint8_t nh, uint8_t
1723 len, const uint8_t * payload, uint32_t payload_s, libnet_t * l,
1724 libnet_ptag_t ptag)
1725 Builds a version 6 RFC 2460 Internet Protocol (IP) destination options
1726 header. This function is special in that it uses the payload interface
1727 to include the options data. The application programmer will build an
1728 IPv6 options byte string and pass it to the function using the payload
1729 interface.
1730
1731 Parameters
1732 nh next header
1733 len length of the header in 8-byte octets not including the first 8
1734 octets
1735 payload options payload
1736 payload_s payload length
1737 l pointer to a libnet context
1738 ptag protocol tag to modify an existing header, 0 to build a new
1739 one
1740
1741 Returns
1742 protocol tag value on success
1743
1744 Return values
1745 -1 on error
1746
1747 LIBNET_API libnet_ptag_t libnet_build_ipv6_frag (uint8_t nh, uint8_t
1748 reserved, uint16_t frag, uint32_t id, const uint8_t * payload, uint32_t
1749 payload_s, libnet_t * l, libnet_ptag_t ptag)
1750 Builds a version 6 RFC 2460 Internet Protocol (IP) fragmentation
1751 header.
1752
1753 Parameters
1754 nh next header
1755 reserved unused value... OR IS IT!
1756 frag fragmentation bits (ala ipv4)
1757 id packet identification
1758 payload optional payload or NULL
1759 payload_s payload length or 0
1760 l pointer to a libnet context
1761 ptag protocol tag to modify an existing header, 0 to build a new
1762 one
1763
1764 Returns
1765 protocol tag value on success
1766
1767 Return values
1768 -1 on error
1769
1770 LIBNET_API libnet_ptag_t libnet_build_ipv6_hbhopts (uint8_t nh, uint8_t
1771 len, const uint8_t * payload, uint32_t payload_s, libnet_t * l,
1772 libnet_ptag_t ptag)
1773 Builds a version 6 RFC 2460 Internet Protocol (IP) hop by hop options
1774 header. This function is special in that it uses the payload interface
1775 to include the options data. The application programmer will build an
1776 IPv6 hop by hop options byte string and pass it to the function using
1777 the payload interface.
1778
1779 Parameters
1780 nh next header
1781 len length of the header in 8-byte octets not including the first 8
1782 octets
1783 payload options payload
1784 payload_s payload length
1785 l pointer to a libnet context
1786 ptag protocol tag to modify an existing header, 0 to build a new
1787 one
1788
1789 Returns
1790 protocol tag value on success
1791
1792 Return values
1793 -1 on error
1794
1795 LIBNET_API libnet_ptag_t libnet_build_ipv6_routing (uint8_t nh, uint8_t
1796 len, uint8_t rtype, uint8_t segments, const uint8_t * payload, uint32_t
1797 payload_s, libnet_t * l, libnet_ptag_t ptag)
1798 Builds a version 6 RFC 2460 Internet Protocol (IP) routing header. This
1799 function is special in that it uses the payload interface to include
1800 the 'type-specific data'; that is the routing information. Most often
1801 this will be a number of 128-bit IPv6 addresses. The application
1802 programmer will build a byte string of IPv6 address and pass them to
1803 the function using the payload interface.
1804
1805 Parameters
1806 nh next header
1807 len length of the header in 8-byte octets not including the first 8
1808 octets
1809 rtype routing header type
1810 segments number of routing segments that follow
1811 payload optional payload of routing information
1812 payload_s payload length
1813 l pointer to a libnet context
1814 ptag protocol tag to modify an existing header, 0 to build a new
1815 one
1816
1817 Returns
1818 protocol tag value on success
1819
1820 Return values
1821 -1 on error
1822
1823 LIBNET_API libnet_ptag_t libnet_build_isl (uint8_t * dhost, uint8_t type,
1824 uint8_t user, uint8_t * shost, uint16_t len, const uint8_t * snap,
1825 uint16_t vid, uint16_t portindex, uint16_t reserved, const uint8_t *
1826 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1827 Builds a Cisco Inter-Switch Link (ISL) header.
1828
1829 Parameters
1830 dhost destination address (should be 01:00:0c:00:00)
1831 type type of frame
1832 user user defined data
1833 shost source mac address
1834 len total length of the encapsulated packet less 18 bytes
1835 snap SNAP information (0xaaaa03 + vendor code)
1836 vid 15 bit VLAN ID, 1 bit BPDU or CDP indicator
1837 portindex port index
1838 reserved used for FDDI and token ring
1839 payload optional payload or NULL
1840 payload_s payload length or 0
1841 l pointer to a libnet context
1842 ptag protocol tag to modify an existing header, 0 to build a new
1843 one
1844
1845 Returns
1846 protocol tag value on success
1847
1848 Return values
1849 -1 on error
1850
1851 LIBNET_API libnet_ptag_t libnet_build_link (const uint8_t * dst, const
1852 uint8_t * src, const uint8_t * oui, uint16_t type, const uint8_t *
1853 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1854 Builds a link layer header for an initialized l. The function
1855 determines the proper link layer header format from how l was
1856 initialized. The function current supports Ethernet and Token Ring link
1857 layers.
1858
1859 Parameters
1860 dst the destination MAC address
1861 src the source MAC address
1862 oui Organizationally Unique Identifier (unused for Ethernet)
1863 type the upper layer protocol type
1864 payload optional payload or NULL
1865 payload_s payload length or 0
1866 l pointer to a libnet context
1867 ptag protocol tag to modify an existing header, 0 to build a new
1868 one
1869
1870 Returns
1871 protocol tag value on success
1872
1873 Return values
1874 -1 on error
1875
1876 LIBNET_API libnet_ptag_t libnet_build_mpls (uint32_t label, uint8_t
1877 experimental, uint8_t bos, uint8_t ttl, const uint8_t * payload,
1878 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1879 Builds an RFC 3032 Multi-Protocol Label Switching (MPLS) header.
1880
1881 Parameters
1882 label 20-bit label value
1883 experimental 3-bit reserved field
1884 bos 1-bit bottom of stack identifier
1885 ttl time to live
1886 payload optional payload or NULL
1887 payload_s payload length or 0
1888 l pointer to a libnet context
1889 ptag protocol tag to modify an existing header, 0 to build a new
1890 one
1891
1892 Returns
1893 protocol tag value on success
1894
1895 Return values
1896 -1 on error
1897
1898 LIBNET_API libnet_ptag_t libnet_build_ntp (uint8_t leap_indicator, uint8_t
1899 version, uint8_t mode, uint8_t stratum, uint8_t poll, uint8_t
1900 precision, uint16_t delay_int, uint16_t delay_frac, uint16_t
1901 dispersion_int, uint16_t dispersion_frac, uint32_t reference_id,
1902 uint32_t ref_ts_int, uint32_t ref_ts_frac, uint32_t orig_ts_int,
1903 uint32_t orig_ts_frac, uint32_t rec_ts_int, uint32_t rec_ts_frac,
1904 uint32_t xmt_ts_int, uint32_t xmt_ts_frac, const uint8_t * payload,
1905 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1906 Builds an RFC 958 Network Time Protocol (NTP) header.
1907
1908 Parameters
1909 leap_indicator the leap indicator
1910 version NTP protocol version
1911 mode NTP mode
1912 stratum stratum
1913 poll polling interval
1914 precision precision
1915 delay_int delay interval
1916 delay_frac delay fraction
1917 dispersion_int dispersion interval
1918 dispersion_frac dispersion fraction
1919 reference_id reference id
1920 ref_ts_int reference timestamp integer
1921 ref_ts_frac reference timestamp fraction
1922 orig_ts_int original timestamp integer
1923 orig_ts_frac original timestamp fraction
1924 rec_ts_int receiver timestamp integer
1925 rec_ts_frac receiver timestamp fraction
1926 xmt_ts_int transmit timestamp integer
1927 xmt_ts_frac transmit timestamp integer
1928 payload optional payload or NULL
1929 payload_s payload length or 0
1930 l pointer to a libnet context
1931 ptag protocol tag to modify an existing header, 0 to build a new
1932 one
1933
1934 Returns
1935 protocol tag value on success
1936
1937 Return values
1938 -1 on error
1939
1940 LIBNET_API libnet_ptag_t libnet_build_ospfv2 (uint16_t len, uint8_t type,
1941 uint32_t rtr_id, uint32_t area_id, uint16_t sum, uint16_t autype, const
1942 uint8_t * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t
1943 ptag)
1944 Parameters
1945 len
1946 type
1947 rtr_id
1948 area_id
1949 sum
1950 autype
1951 payload optional payload or NULL
1952 payload_s payload length or 0
1953 l pointer to a libnet context
1954 ptag protocol tag to modify an existing header, 0 to build a new
1955 one
1956
1957 Returns
1958 protocol tag value on success
1959
1960 Return values
1961 -1 on error
1962
1963 LIBNET_API libnet_ptag_t libnet_build_ospfv2_dbd (uint16_t dgram_len,
1964 uint8_t opts, uint8_t type, uint32_t seqnum, const uint8_t * payload,
1965 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
1966 Parameters
1967 dgram_len
1968 opts
1969 type
1970 seqnum
1971 payload optional payload or NULL
1972 payload_s payload length or 0
1973 l pointer to a libnet context
1974 ptag protocol tag to modify an existing header, 0 to build a new
1975 one
1976
1977 Returns
1978 protocol tag value on success
1979
1980 Return values
1981 -1 on error
1982
1983 LIBNET_API libnet_ptag_t libnet_build_ospfv2_hello (uint32_t netmask,
1984 uint16_t interval, uint8_t opts, uint8_t priority, uint32_t dead_int,
1985 uint32_t des_rtr, uint32_t bkup_rtr, const uint8_t * payload, uint32_t
1986 payload_s, libnet_t * l, libnet_ptag_t ptag)
1987 Parameters
1988 netmask
1989 interval
1990 opts
1991 priority
1992 dead_int
1993 des_rtr
1994 bkup_rtr
1995 payload optional payload or NULL
1996 payload_s payload length or 0
1997 l pointer to a libnet context
1998 ptag protocol tag to modify an existing header, 0 to build a new
1999 one
2000
2001 Returns
2002 protocol tag value on success
2003
2004 Return values
2005 -1 on error
2006
2007 libnet_ptag_t libnet_build_ospfv2_hello_neighbor (uint32_t netmask,
2008 uint16_t interval, uint8_t opts, uint8_t priority, uint32_t dead_int,
2009 uint32_t des_rtr, uint32_t bkup_rtr, uint32_t neighbor, const uint8_t *
2010 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
2011 Parameters
2012 netmask
2013 interval
2014 opts
2015 priority
2016 dead_int
2017 des_rtr
2018 bkup_rtr
2019 neighbor
2020 payload optional payload or NULL
2021 payload_s payload length or 0
2022 l pointer to a libnet context
2023 ptag protocol tag to modify an existing header, 0 to build a new
2024 one
2025
2026 Returns
2027 protocol tag value on success
2028
2029 Return values
2030 -1 on error
2031
2032 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa (uint16_t age, uint8_t
2033 opts, uint8_t type, uint32_t lsid, uint32_t advrtr, uint32_t seqnum,
2034 uint16_t sum, uint16_t len, const uint8_t * payload, uint32_t
2035 payload_s, libnet_t * l, libnet_ptag_t ptag)
2036 Parameters
2037 age
2038 opts
2039 type
2040 lsid
2041 advrtr
2042 seqnum
2043 sum
2044 len
2045 payload optional payload or NULL
2046 payload_s payload length or 0
2047 l pointer to a libnet context
2048 ptag protocol tag to modify an existing header, 0 to build a new
2049 one
2050
2051 Returns
2052 protocol tag value on success
2053
2054 Return values
2055 -1 on error
2056
2057 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_as (uint32_t nmask,
2058 uint32_t metric, uint32_t fwdaddr, uint32_t tag, const uint8_t *
2059 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
2060 Parameters
2061 nmask
2062 metric
2063 fwdaddr
2064 tag
2065 payload optional payload or NULL
2066 payload_s payload length or 0
2067 l pointer to a libnet context
2068 ptag protocol tag to modify an existing header, 0 to build a new
2069 one
2070
2071 Returns
2072 protocol tag value on success
2073
2074 Return values
2075 -1 on error
2076
2077 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_net (uint32_t nmask,
2078 uint32_t rtrid, const uint8_t * payload, uint32_t payload_s, libnet_t *
2079 l, libnet_ptag_t ptag)
2080 Parameters
2081 nmask
2082 rtrid
2083 payload optional payload or NULL
2084 payload_s payload length or 0
2085 l pointer to a libnet context
2086 ptag protocol tag to modify an existing header, 0 to build a new
2087 one
2088
2089 Returns
2090 protocol tag value on success
2091
2092 Return values
2093 -1 on error
2094
2095 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_rtr (uint16_t flags,
2096 uint16_t num, uint32_t id, uint32_t data, uint8_t type, uint8_t tos,
2097 uint16_t metric, const uint8_t * payload, uint32_t payload_s, libnet_t
2098 * l, libnet_ptag_t ptag)
2099 Parameters
2100 flags
2101 num
2102 id
2103 data
2104 type
2105 tos
2106 metric
2107 payload optional payload or NULL
2108 payload_s payload length or 0
2109 l pointer to a libnet context
2110 ptag protocol tag to modify an existing header, 0 to build a new
2111 one
2112
2113 Returns
2114 protocol tag value on success
2115
2116 Return values
2117 -1 on error
2118
2119 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsa_sum (uint32_t nmask,
2120 uint32_t metric, uint32_t tos, const uint8_t * payload, uint32_t
2121 payload_s, libnet_t * l, libnet_ptag_t ptag)
2122 Parameters
2123 nmask
2124 metric
2125 tos
2126 payload optional payload or NULL
2127 payload_s payload length or 0
2128 l pointer to a libnet context
2129 ptag protocol tag to modify an existing header, 0 to build a new
2130 one
2131
2132 Returns
2133 protocol tag value on success
2134
2135 Return values
2136 -1 on error
2137
2138 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsr (uint32_t type, uint32_t
2139 lsid, uint32_t advrtr, const uint8_t * payload, uint32_t payload_s,
2140 libnet_t * l, libnet_ptag_t ptag)
2141 Parameters
2142 type
2143 lsid
2144 advrtr
2145 payload optional payload or NULL
2146 payload_s payload length or 0
2147 l pointer to a libnet context
2148 ptag protocol tag to modify an existing header, 0 to build a new
2149 one
2150
2151 Returns
2152 protocol tag value on success
2153
2154 Return values
2155 -1 on error
2156
2157 LIBNET_API libnet_ptag_t libnet_build_ospfv2_lsu (uint32_t num, const
2158 uint8_t * payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t
2159 ptag)
2160 Parameters
2161 num
2162 payload optional payload or NULL
2163 payload_s payload length or 0
2164 l pointer to a libnet context
2165 ptag protocol tag to modify an existing header, 0 to build a new
2166 one
2167
2168 Returns
2169 protocol tag value on success
2170
2171 Return values
2172 -1 on error
2173
2174 LIBNET_API libnet_ptag_t libnet_build_rip (uint8_t cmd, uint8_t version,
2175 uint16_t rd, uint16_t af, uint16_t rt, uint32_t addr, uint32_t mask,
2176 uint32_t next_hop, uint32_t metric, const uint8_t * payload, uint32_t
2177 payload_s, libnet_t * l, libnet_ptag_t ptag)
2178 Builds a Routing Information Protocol header (RFCs 1058 and 2453).
2179
2180 Parameters
2181 cmd command
2182 version protocol version
2183 rd version one: 0, version two: routing domain
2184 af address family
2185 rt version one: 0, version two: route tag
2186 addr IPv4 address
2187 mask version one: 0, version two: subnet mask
2188 next_hop version one: 0, version two: next hop address
2189 metric routing metric
2190 payload optional payload or NULL
2191 payload_s payload length or 0
2192 l pointer to a libnet context
2193 ptag protocol tag to modify an existing header, 0 to build a new
2194 one
2195
2196 Returns
2197 protocol tag value on success
2198
2199 Return values
2200 -1 on error
2201
2202 LIBNET_API libnet_ptag_t libnet_build_rpc_call (uint32_t rm, uint32_t xid,
2203 uint32_t prog_num, uint32_t prog_vers, uint32_t procedure, uint32_t
2204 cflavor, uint32_t clength, uint8_t * cdata, uint32_t vflavor, uint32_t
2205 vlength, const uint8_t * vdata, const uint8_t * payload, uint32_t
2206 payload_s, libnet_t * l, libnet_ptag_t ptag)
2207 Builds an Remote Procedure Call (Version 2) Call message header as
2208 specified in RFC 1831. This builder provides the option for specifying
2209 the record marking which is required when used with streaming protocols
2210 (TCP).
2211
2212 Parameters
2213 rm record marking indicating the position in a stream, 0 otherwise
2214 xid transaction identifier used to link calls and replies
2215 prog_num remote program specification typically between 0 -
2216 1fffffff
2217 prog_vers remote program version specification
2218 procedure procedure to be performed by remote program
2219 cflavor authentication credential type
2220 clength credential length (should be 0)
2221 cdata opaque credential data (currently unused)
2222 vflavor authentication verifier type
2223 vlength verifier length (should be 0)
2224 vdata opaque verifier data (currently unused)
2225 payload optional payload or NULL
2226 payload_s payload length or 0
2227 l pointer to a libnet context
2228 ptag protocol tag to modify an existing header, 0 to build a new
2229 one
2230
2231 Returns
2232 protocol tag value on success
2233
2234 Return values
2235 -1 on error
2236
2237 LIBNET_API libnet_ptag_t libnet_build_sebek (uint32_t magic, uint16_t
2238 version, uint16_t type, uint32_t counter, uint32_t time_sec, uint32_t
2239 time_usec, uint32_t pid, uint32_t uid, uint32_t fd, uint8_t
2240 cmd[SEBEK_CMD_LENGTH], uint32_t length, const uint8_t * payload,
2241 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
2242 Builds a Sebek header. The Sebek protocol was designed by the Honeynet
2243 Project as a transport mechanism for post-intrusion forensic data. More
2244 information may be found here:
2245 http://www.honeynet.org/papers/sebek.pdf.
2246
2247 Parameters
2248 magic identify packets that should be hidden
2249 version protocol version, currently 1
2250 type type of record (read data is type 0, write data is type 1)
2251 counter PDU counter used to identify when packet are lost
2252 time_sec seconds since EPOCH according to the honeypot
2253 time_usec residual microseconds
2254 pid PID
2255 uid UID
2256 fd FD
2257 cmd 12 first characters of the command
2258 length length in bytes of the PDU's body
2259 payload optional payload or NULL
2260 payload_s payload length or 0
2261 l pointer to a libnet context
2262 ptag protocol tag to modify an existing header, 0 to build a new
2263 one
2264
2265 Returns
2266 protocol tag value on success
2267
2268 Return values
2269 -1 on error
2270
2271 LIBNET_API libnet_ptag_t libnet_build_stp_conf (uint16_t id, uint8_t
2272 version, uint8_t bpdu_type, uint8_t flags, const uint8_t * root_id,
2273 uint32_t root_pc, const uint8_t * bridge_id, uint16_t port_id, uint16_t
2274 message_age, uint16_t max_age, uint16_t hello_time, uint16_t f_delay,
2275 const uint8_t * payload, uint32_t payload_s, libnet_t * l,
2276 libnet_ptag_t ptag)
2277 Builds an IEEE 802.1d Spanning Tree Protocol (STP) configuration
2278 header. STP frames are usually encapsulated inside of an 802.2 + 802.3
2279 frame combination.
2280
2281 Parameters
2282 id protocol id
2283 version protocol version
2284 bpdu_type bridge protocol data unit type
2285 flags flags
2286 root_id root id
2287 root_pc root path cost
2288 bridge_id bridge id
2289 port_id port id
2290 message_age message age
2291 max_age max age
2292 hello_time hello time
2293 f_delay forward delay
2294 payload optional payload or NULL
2295 payload_s payload length or 0
2296 l pointer to a libnet context
2297 ptag protocol tag to modify an existing header, 0 to build a new
2298 one
2299
2300 Returns
2301 protocol tag value on success
2302
2303 Return values
2304 -1 on error
2305
2306 LIBNET_API libnet_ptag_t libnet_build_stp_tcn (uint16_t id, uint8_t
2307 version, uint8_t bpdu_type, const uint8_t * payload, uint32_t
2308 payload_s, libnet_t * l, libnet_ptag_t ptag)
2309 Builds an IEEE 802.1d Spanning Tree Protocol (STP) topology change
2310 notification header. STP frames are usually encapsulated inside of an
2311 802.2 + 802.3 frame combination.
2312
2313 Parameters
2314 id protocol id
2315 version protocol version
2316 bpdu_type bridge protocol data unit type
2317 payload optional payload or NULL
2318 payload_s payload length or 0
2319 l pointer to a libnet context
2320 ptag protocol tag to modify an existing header, 0 to build a new
2321 one
2322
2323 Returns
2324 protocol tag value on success
2325
2326 Return values
2327 -1 on error
2328
2329 LIBNET_API libnet_ptag_t libnet_build_tcp (uint16_t sp, uint16_t dp,
2330 uint32_t seq, uint32_t ack, uint8_t control, uint16_t win, uint16_t
2331 sum, uint16_t urg, uint16_t len, const uint8_t * payload, uint32_t
2332 payload_s, libnet_t * l, libnet_ptag_t ptag)
2333 Builds an RFC 793 Transmission Control Protocol (TCP) header.
2334
2335 Parameters
2336 sp source port
2337 dp destination port
2338 seq sequence number
2339 ack acknowledgement number
2340 control control flags
2341 win window size
2342 sum checksum (0 for libnet to auto-fill)
2343 urg urgent pointer
2344 len total length of the TCP packet (for checksum calculation)
2345 payload
2346 payload_s payload length or 0
2347 l pointer to a libnet context
2348 ptag protocol tag to modify an existing header, 0 to build a new
2349 one
2350
2351 Returns
2352 protocol tag value on success
2353
2354 Return values
2355 -1 on error
2356
2357 LIBNET_API libnet_ptag_t libnet_build_tcp_options (const uint8_t * options,
2358 uint32_t options_s, libnet_t * l, libnet_ptag_t ptag)
2359 Builds an RFC 793 Transmission Control Protocol (TCP) options header.
2360 The function expects options to be a valid TCP options string of size
2361 options_s, which is no larger than 40 bytes (the maximum size of an
2362 options string). The function checks to ensure that the packet consists
2363 of a TCP header preceded by an IPv4 header, and that the addition of
2364 the options string would not result in a packet larger than 65,535
2365 bytes (IPMAXPACKET). The function counts up the number of 32-bit words
2366 in the options string and adjusts the TCP header length value as
2367 necessary.
2368
2369 Parameters
2370 options byte string of TCP options
2371 options_s length of options string
2372 l pointer to a libnet context
2373 ptag protocol tag to modify an existing header, 0 to build a new
2374 one
2375
2376 Returns
2377 protocol tag value on success
2378
2379 Return values
2380 -1 on error
2381
2382 LIBNET_API libnet_ptag_t libnet_build_token_ring (uint8_t ac, uint8_t fc,
2383 const uint8_t * dst, const uint8_t * src, uint8_t dsap, uint8_t ssap,
2384 uint8_t cf, const uint8_t * oui, uint16_t type, const uint8_t *
2385 payload, uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
2386 Builds a token ring header.
2387
2388 Parameters
2389 ac access control
2390 fc frame control
2391 dst destination address
2392 src source address
2393 dsap destination service access point
2394 ssap source service access point
2395 cf control field
2396 oui Organizationally Unique Identifier
2397 type upper layer protocol type
2398 payload optional payload or NULL
2399 payload_s payload length or 0
2400 l pointer to a libnet context
2401 ptag protocol tag to modify an existing header, 0 to build a new
2402 one
2403
2404 Returns
2405 protocol tag value on success
2406
2407 Return values
2408 -1 on error
2409
2410 LIBNET_API libnet_ptag_t libnet_build_udp (uint16_t sp, uint16_t dp,
2411 uint16_t len, uint16_t sum, const uint8_t * payload, uint32_t
2412 payload_s, libnet_t * l, libnet_ptag_t ptag)
2413 Builds an RFC 768 User Datagram Protocol (UDP) header.
2414
2415 Parameters
2416 sp source port
2417 dp destination port
2418 len total length of the UDP packet
2419 sum checksum (0 for libnet to auto-fill)
2420 payload optional payload or NULL
2421 payload_s payload length or 0
2422 l pointer to a libnet context
2423 ptag protocol tag to modify an existing header, 0 to build a new
2424 one
2425
2426 Returns
2427 protocol tag value on success
2428
2429 Return values
2430 -1 on error
2431
2432 LIBNET_API libnet_ptag_t libnet_build_vrrp (uint8_t version, uint8_t type,
2433 uint8_t vrouter_id, uint8_t priority, uint8_t ip_count, uint8_t
2434 auth_type, uint8_t advert_int, uint16_t sum, const uint8_t * payload,
2435 uint32_t payload_s, libnet_t * l, libnet_ptag_t ptag)
2436 Builds an RFC 2338 Virtual Router Redundacy Protool (VRRP) header. Use
2437 the payload interface to specify address and authentication
2438 information. To build a 'legal' packet, the destination IPv4 address
2439 should be the multicast * address 224.0.0.18, the IP TTL should be set
2440 to 255, and the IP protocol should be set to 112.
2441
2442 Parameters
2443 version VRRP version (should be 2)
2444 type VRRP packet type (should be 1 -- ADVERTISEMENT)
2445 vrouter_id virtual router identification
2446 priority priority (higher numbers indicate higher priority)
2447 ip_count number of IPv4 addresses contained in this advertisement
2448 auth_type type of authentication (0, 1, 2 -- see RFC)
2449 advert_int interval between advertisements
2450 sum checksum (0 for libnet to autofill)
2451 payload optional payload or NULL
2452 payload_s payload length or 0
2453 l pointer to a libnet context
2454 ptag protocol tag to modify an existing header, 0 to build a new
2455 one
2456
2457 Returns
2458 protocol tag value on success
2459
2460 Return values
2461 -1 on error
2462
2463 LIBNET_API void libnet_clear_packet (libnet_t * l)
2464 Clears the current packet referenced and frees all pblocks. Should be
2465 called when the programmer want to send a completely new packet of a
2466 different type using the same context.
2467
2468 Parameters
2469 l pointer to a libnet context
2470
2471 int libnet_cq_add (libnet_t * l, char * label)
2472 [Context Queue] Adds a new context to the libnet context queue. If no
2473 queue exists, this function will create the queue and add the specified
2474 libnet context as the first entry on the list. The functions checks to
2475 ensure niether l nor label are NULL, and that label doesn't refer to an
2476 existing context already in the queue. Additionally, l should refer to
2477 a libnet context previously initialized with a call to libnet_init().
2478 If the context queue in write locked, this function will fail.
2479
2480 Parameters
2481 l pointer to a libnet context
2482 label a canonical name given to recognize the new context, no
2483 longer than LIBNET_LABEL_SIZE
2484
2485 Return values
2486 1 on success
2487 -1 on failure
2488
2489 LIBNET_API void libnet_cq_destroy (void)
2490 [Context Queue] Destroys the entire context queue, calling
2491 libnet_destroy() on each member context.
2492
2493 LIBNET_API uint32_t libnet_cq_end_loop (void)
2494 [Context Queue]
2495
2496 LIBNET_API libnet_t* libnet_cq_find_by_label (char * label)
2497 [Context Queue] Locates a libnet context from the queue, indexed by a
2498 canonical label.
2499
2500 Parameters
2501 label canonical label of the libnet context to retrieve
2502
2503 Returns
2504 the expected libnet context
2505
2506 Return values
2507 NULL on failure
2508
2509 LIBNET_API const char* libnet_cq_getlabel (libnet_t * l)
2510 [Context Queue] Returns the canonical label associated with the
2511 context.
2512
2513 Parameters
2514 l pointer to a libnet context
2515
2516 Returns
2517 pointer to the libnet context's label
2518
2519 LIBNET_API libnet_t* libnet_cq_head (void)
2520 [Context Queue] Intiailizes the interator interface and set a write
2521 lock on the entire queue. This function is intended to be called just
2522 prior to interating through the entire list of contexts (with the
2523 probable intent of inject a series of packets in rapid succession).
2524 This function is often used as per the following:
2525
2526 for (l = libnet_cq_head(); libnet_cq_last(); l = libnet_cq_next()) {
2527 ... }
2528
2529 Much of the time, the application programmer will use the iterator as
2530 it is written above; as such, libnet provides a macro to do exactly
2531 that, for_each_context_in_cq(l). Warning: do not call the iterator more
2532 than once in a single loop.
2533
2534 Returns
2535 the head of the context queue
2536
2537 LIBNET_API int libnet_cq_last (void)
2538 [Context Queue] Check whether the iterator is at the last context in
2539 the queue.
2540
2541 Return values
2542 1 if at the end of the context queue
2543 0 otherwise
2544
2545 LIBNET_API libnet_t* libnet_cq_next (void)
2546 [Context Queue] Get next context from the context queue.
2547
2548 Returns
2549 the next context from the context queue
2550
2551 LIBNET_API libnet_t* libnet_cq_remove (libnet_t * l)
2552 [Context Queue] Removes a specified context from the libnet context
2553 queue by specifying the libnet context pointer. Note the function will
2554 remove the specified context from the context queue and cleanup
2555 internal memory from the queue, it is up to the application programmer
2556 to free the returned libnet context with a call to libnet_destroy().
2557 Also, as it is not necessary to keep the libnet context pointer when
2558 initially adding it to the context queue, most application programmers
2559 will prefer to refer to entries on the context queue by canonical name
2560 and would use libnet_cq_remove_by_label(). If the context queue is
2561 write locked, this function will fail.
2562
2563 Parameters
2564 l pointer to a libnet context
2565
2566 Returns
2567 the pointer to the removed libnet context
2568
2569 Return values
2570 NULL on failure
2571
2572 LIBNET_API libnet_t* libnet_cq_remove_by_label (char * label)
2573 [Context Queue] Removes a specified context from the libnet context
2574 queue by specifying the canonical name. Note the function will remove
2575 the specified context from the context queue and cleanup internal
2576 memory from the queue, it is up to the application programmer to free
2577 the returned libnet context with a call to libnet_destroy(). If the
2578 context queue is write locked, this function will fail.
2579
2580 Parameters
2581 label canonical name of the context to remove
2582
2583 Returns
2584 the pointer to the removed libnet context
2585
2586 Return values
2587 NULL on failure
2588
2589 LIBNET_API uint32_t libnet_cq_size (void)
2590 [Context Queue] Function returns the number of libnet contexts that are
2591 in the queue.
2592
2593 Returns
2594 the number of libnet contexts currently in the queue
2595
2596 LIBNET_API void libnet_destroy (libnet_t * l)
2597 Shuts down the libnet session referenced by l. It closes the network
2598 interface and frees all internal memory structures associated with l.
2599
2600
2601 Parameters
2602 l pointer to a libnet context
2603
2604 LIBNET_API void libnet_diag_dump_context (libnet_t * l)
2605 [Diagnostic] Prints the contents of the given context.
2606
2607 Parameters
2608 l pointer to a libnet context
2609
2610 void libnet_diag_dump_hex (const uint8_t * packet, uint32_t len, int swap,
2611 FILE * stream)
2612 [Diagnostic] Function prints the contents of the supplied buffer to the
2613 supplied stream pointer. Will swap endianness based disposition of mode
2614 variable. Useful to be used in conjunction with the advanced interface
2615 and a culled packet.
2616
2617 Parameters
2618 packet the packet to print
2619 len length of the packet in bytes
2620 swap 1 to swap byte order, 0 to not. Counter-intuitively, it is
2621 necessary to swap in order to see the byte order as it is on the
2622 wire (this may be a bug).
2623 stream a stream pointer to print to
2624
2625 LIBNET_API void libnet_diag_dump_pblock (libnet_t * l)
2626 [Diagnostic] Prints the contents of every pblock.
2627
2628 Parameters
2629 l pointer to a libnet context
2630
2631 LIBNET_API char* libnet_diag_dump_pblock_type (uint8_t type)
2632 [Diagnostic] Returns the canonical name of the pblock type.
2633
2634 Parameters
2635 type pblock type
2636
2637 Returns
2638 a string representing the pblock type type
2639
2640 Return values
2641 unknown for an unknown value
2642
2643 LIBNET_API struct libnet_ether_addr* libnet_get_hwaddr (libnet_t * l)
2644 Returns the MAC address for the device libnet was initialized with. If
2645 libnet was initialized without a device the function will attempt to
2646 find one. If the function fails and returns NULL a call to
2647 libnet_geterror() will tell you why.
2648
2649 Parameters
2650 l pointer to a libnet context
2651
2652 Returns
2653 a pointer to the MAC address or NULL
2654
2655 LIBNET_API uint32_t libnet_get_ipaddr4 (libnet_t * l)
2656 Returns the IP address for the device libnet was initialized with. If
2657 libnet was initialized without a device (in raw socket mode) the
2658 function will attempt to find one. If the function fails and returns -1
2659 a call to libnet_geterrror() will tell you why.
2660
2661 Parameters
2662 l pointer to a libnet context
2663
2664 Returns
2665 a big endian IP address suitable for use in a libnet_build function
2666
2667 Return values
2668 -1
2669
2670 LIBNET_API struct libnet_in6_addr libnet_get_ipaddr6 (libnet_t * l)
2671 Returns the IPv6 address for the device libnet was initialized with. If
2672 libnet was initialized without a device (in raw socket mode) the
2673 function will attempt to find one. If the function fails and returns
2674 in6addr_error, a call to libnet_geterrror() will tell you why. This
2675 function is not yet implemented for Win32 platforms.
2676
2677 Parameters
2678 l pointer to a libnet context
2679
2680 Return values
2681 in6addr_error on failure
2682
2683 LIBNET_API uint32_t libnet_get_prand (int mod)
2684 Generates an unsigned pseudo-random value within the range specified by
2685 mod. LIBNET_PR2 0 - 1 LIBNET_PR8 0 - 255 LIBNET_PR16 0 - 32767
2686 LIBNET_PRu16 0 - 65535 LIBNET_PR32 0 - 2147483647 LIBNET_PRu32 0 -
2687 4294967295
2688
2689 Parameters
2690 mod one the of LIBNET_PR* constants
2691
2692 Return values
2693 1 on success
2694 -1 on failure
2695
2696 LIBNET_API const char* libnet_getdevice (libnet_t * l)
2697 Returns the canonical name of the device used for packet injection.
2698
2699 Parameters
2700 l pointer to a libnet context
2701
2702 Returns
2703 the canonical name of the device used for packet injection. Note it
2704 can be NULL without being an error.
2705
2706 LIBNET_API char* libnet_geterror (libnet_t * l)
2707 Returns the last error set inside of the referenced libnet context.
2708 This function should be called anytime a function fails or an error
2709 condition is detected inside of libnet.
2710
2711 Parameters
2712 l pointer to a libnet context
2713
2714 Returns
2715 an error string or NULL if no error has occurred
2716
2717 LIBNET_API int libnet_getfd (libnet_t * l)
2718 Returns the FILENO of the file descriptor used for packet injection.
2719
2720 Parameters
2721 l pointer to a libnet context
2722
2723 Returns
2724 the file number of the file descriptor used for packet injection
2725
2726 LIBNET_API uint32_t libnet_getgre_length (uint16_t fv)
2727 Parameters
2728 fv see libnet_build_gre().
2729
2730 Returns
2731 size
2732
2733 See also
2734 libnet_build_gre().
2735
2736 LIBNET_API uint32_t libnet_getpacket_size (libnet_t * l)
2737 Returns the sum of the size of all of the pblocks inside of l (this
2738 should be the resulting packet size).
2739
2740 Parameters
2741 l pointer to a libnet context
2742
2743 Returns
2744 the size of the packet in l
2745
2746 LIBNET_API uint8_t* libnet_getpbuf (libnet_t * l, libnet_ptag_t ptag)
2747 Returns the pblock buffer contents for the specified ptag; a subsequent
2748 call to libnet_getpbuf_size() should be made to determine the size of
2749 the buffer.
2750
2751 Parameters
2752 l pointer to a libnet context
2753 ptag the ptag reference number
2754
2755 Returns
2756 a pointer to the pblock buffer or NULL on error
2757
2758 LIBNET_API uint32_t libnet_getpbuf_size (libnet_t * l, libnet_ptag_t ptag)
2759 Returns the pblock buffer size for the specified ptag; a previous call
2760 to libnet_getpbuf() should be made to pull the actual buffer contents.
2761
2762 Parameters
2763 l pointer to a libnet context
2764 ptag the ptag reference number
2765
2766 Returns
2767 the size of the pblock buffer
2768
2769 LIBNET_API uint8_t* libnet_hex_aton (const char * s, int * len)
2770 Takes a colon separated hexidecimal address (from the command line) and
2771 returns a bytestring suitable for use in a libnet_build function. Note
2772 this function performs an implicit malloc and the return value should
2773 be freed after its use.
2774
2775 Parameters
2776 s the string to be parsed
2777 len the resulting size of the returned byte string
2778
2779 Returns
2780 a byte string or NULL on failure
2781
2782 LIBNET_API int libnet_in6_is_error (struct libnet_in6_addr addr)
2783 Check a libnet_in6_addr structure for identity with in6addr_error.
2784
2785 Parameters
2786 addr address to check
2787
2788 Return values
2789 1 if addr is in6addr_error
2790 0 if it is not
2791
2792 LIBNET_API libnet_t* libnet_init (int injection_type, const char * device,
2793 char * err_buf)
2794 Creates the libnet environment. It initializes the library and returns
2795 a libnet context. If the injection_type is LIBNET_LINK or
2796 LIBNET_LINK_ADV, the function initializes the injection primitives for
2797 the link-layer interface enabling the application programmer to build
2798 packets starting at the data-link layer (which also provides more
2799 granular control over the IP layer). If libnet uses the link-layer and
2800 the device argument is non-NULL, the function attempts to use the
2801 specified network device for packet injection. This is either a
2802 canonical string that references the device (such as 'eth0' for a 100MB
2803 Ethernet card on Linux or 'fxp0' for a 100MB Ethernet card on OpenBSD)
2804 or the dots and decimals representation of the device's IP address
2805 (192.168.0.1). If device is NULL, libnet attempts to find a suitable
2806 device to use. If the injection_type is LIBNET_RAW4 or LIBNET_RAW4_ADV,
2807 the function initializes the injection primitives for the IPv4 raw
2808 socket interface. The final argument, err_buf, should be a buffer of
2809 size LIBNET_ERRBUF_SIZE and holds an error message if the function
2810 fails. This function requires root privileges to execute successfully.
2811 Upon success, the function returns a valid libnet context for use in
2812 later function calls; upon failure, the function returns NULL.
2813
2814 Parameters
2815 injection_type packet injection type (LIBNET_LINK, LIBNET_LINK_ADV,
2816 LIBNET_RAW4, LIBNET_RAW4_ADV, LIBNET_RAW6, LIBNET_RAW6_ADV)
2817 device the interface to use (NULL and libnet will choose one)
2818 err_buf will contain an error message on failure
2819
2820 Returns
2821 libnet context ready for use or NULL on error.
2822
2823 LIBNET_API uint32_t libnet_name2addr4 (libnet_t * l, const char *
2824 host_name, uint8_t use_name)
2825 Takes a dotted decimal string or a canonical DNS name and returns a
2826 network byte ordered IPv4 address. This may incur a DNS lookup if mode
2827 is set to LIBNET_RESOLVE and host_name refers to a canonical DNS name.
2828 If mode is set to LIBNET_DONT_RESOLVE no DNS lookup will occur. The
2829 function can fail if DNS lookup fails or if mode is set to
2830 LIBNET_DONT_RESOLVE and host_name refers to a canonical DNS name.
2831
2832 Parameters
2833 l pointer to a libnet context
2834 host_name pointer to a string containing a presentation format host
2835 name
2836 use_name LIBNET_RESOLVE or LIBNET_DONT_RESOLVE
2837
2838 Returns
2839 address in network byte order
2840
2841 Return values
2842 -1 (2^32 - 1) on error
2843
2844 LIBNET_API struct libnet_in6_addr libnet_name2addr6 (libnet_t * l, const
2845 char * host_name, uint8_t use_name)
2846 Takes a dotted decimal string or a canonical DNS name and returns a
2847 network byte ordered IPv6 address. This may incur a DNS lookup if mode
2848 is set to LIBNET_RESOLVE and host_name refers to a canonical DNS name.
2849 If mode is set to LIBNET_DONT_RESOLVE no DNS lookup will occur. The
2850 function can fail if DNS lookup fails or if mode is set to
2851 LIBNET_DONT_RESOLVE and host_name refers to a canonical DNS name.
2852
2853 Parameters
2854 l pointer to a libnet context
2855 host_name pointer to a string containing a presentation format host
2856 name
2857 use_name LIBNET_RESOLVE or LIBNET_DONT_RESOLVE
2858
2859 Returns
2860 network byte ordered IPv6 address structure
2861
2862 LIBNET_API int libnet_plist_chain_dump (libnet_plist_t * plist)
2863 Runs through the port list and prints the contents of the port list
2864 chain list to stdout.
2865
2866 Parameters
2867 plist previously created portlist
2868
2869 Return values
2870 1 on success
2871 -1 on failure
2872
2873 LIBNET_API char* libnet_plist_chain_dump_string (libnet_plist_t * plist)
2874 Runs through the port list and prints the contents of the port list
2875 chain list to string. This function uses strdup and is not re-entrant.
2876 It also has a memory leak and should not really be used.
2877
2878 Parameters
2879 plist previously created portlist
2880
2881 Returns
2882 a printable string containing the port list contents on success or
2883 NULL on error
2884
2885 LIBNET_API int libnet_plist_chain_free (libnet_plist_t * plist)
2886 Frees all memory associated with port list chain.
2887
2888 Parameters
2889 plist previously created portlist
2890
2891 Return values
2892 1 on success
2893 -1 on failure
2894
2895 LIBNET_API int libnet_plist_chain_new (libnet_t * l, libnet_plist_t **
2896 plist, char * token_list)
2897 Creates a new port list. Port list chains are useful for TCP and UDP-
2898 based applications that need to send packets to a range of ports
2899 (contiguous or otherwise). The port list chain, which token_list points
2900 to, should contain a series of int8_tacters from the following list:
2901 '0123456789,-' of the general format 'x - y, z', where 'xyz' are port
2902 numbers between 0 and 65,535. plist points to the front of the port
2903 list chain list for use in further libnet_plist_chain() functions. Upon
2904 success, the function returns
2905
2906 1. Upon failure, the function returns -1 and libnet_geterror() can
2907 tell you why.
2908
2909 Parameters
2910 l pointer to a libnet context
2911 plist if successful, will refer to the portlist, if not, NULL
2912 token_list string containing the port list primitive
2913
2914 Return values
2915 1 on success
2916 -1 on failure
2917
2918 LIBNET_API int libnet_plist_chain_next_pair (libnet_plist_t * plist,
2919 uint16_t * bport, uint16_t * eport)
2920 Returns the next port list chain pair from the port list chain plist.
2921 bport and eport contain the starting port number and ending port
2922 number, respectively. Upon success, the function returns 1 and fills in
2923 the port variables; however, if the list is empty, the function returns
2924 0 and sets both port variables to 0. Upon failure, the function returns
2925 -1.
2926
2927 Parameters
2928 plist previously created portlist
2929 bport will contain the beginning port number or 0
2930 eport will contain the ending port number or 0
2931
2932 Return values
2933 1 on success
2934 0 if empty
2935 -1 on failure
2936
2937 LIBNET_API int libnet_seed_prand (libnet_t * l)
2938 Seeds the pseudo-random number generator.
2939
2940 Parameters
2941 l pointer to a libnet context
2942
2943 Return values
2944 1 on success
2945 -1 on failure
2946
2947 LIBNET_API void libnet_stats (libnet_t * l, struct libnet_stats * ls)
2948 Fills in a libnet_stats structure with packet injection statistics
2949 (packets written, bytes written, packet sending errors).
2950
2951 Parameters
2952 l pointer to a libnet context
2953 ls pointer to a libnet statistics structure
2954
2955 LIBNET_API int libnet_toggle_checksum (libnet_t * l, libnet_ptag_t ptag,
2956 int mode)
2957 If a given protocol header is built with the checksum field set to '0',
2958 by default libnet will calculate the header checksum prior to
2959 injection. If the header is set to any other value, by default libnet
2960 will not calculate the header checksum. To over-ride this behavior, use
2961 libnet_toggle_checksum(). Switches auto-checksumming on or off for the
2962 specified ptag. If mode is set to LIBNET_ON, libnet will mark the
2963 specified ptag to calculate a checksum for the ptag prior to injection.
2964 This assumes that the ptag refers to a protocol that has a checksum
2965 field. If mode is set to LIBNET_OFF, libnet will clear the checksum
2966 flag and no checksum will be computed prior to injection. This assumes
2967 that the programmer will assign a value (zero or otherwise) to the
2968 checksum field. Often times this is useful if a precomputed checksum or
2969 some other predefined value is going to be used. Note that when libnet
2970 is initialized with LIBNET_RAW4, the IPv4 header checksum will always
2971 be computed by the kernel prior to injection, regardless of what the
2972 programmer sets.
2973
2974 Parameters
2975 l pointer to a libnet context
2976 ptag the ptag reference number
2977 mode LIBNET_ON or LIBNET_OFF
2978
2979 Return values
2980 1 on success
2981 -1 on failure
2982
2983 LIBNET_API const char* libnet_version (void)
2984 Returns the version of libnet.
2985
2986 Returns
2987 the libnet version
2988
2989 LIBNET_API int libnet_write (libnet_t * l)
2990 Writes a prebuilt packet to the network. The function assumes that l
2991 was previously initialized (via a call to libnet_init()) and that a
2992 previously constructed packet has been built inside this context (via
2993 one or more calls to the libnet_build* family of functions) and is
2994 ready to go. Depending on how libnet was initialized, the function will
2995 write the packet to the wire either via the raw or link layer
2996 interface. The function will also bump up the internal libnet stat
2997 counters which are retrievable via libnet_stats().
2998
2999 Parameters
3000 l pointer to a libnet context
3001
3002 Returns
3003 the number of bytes written
3004
3005 Return values
3006 -1 on error
3007
3009 libnet(3)
3010
3012 The original author of libnet is Mike D. Schiffman.
3013
3014 libnet has been maintained and extensively enhanced since 2009 by Sam
3015 Roberts.
3016
3017 It is maintained by the Libnet Developer Community at GitHub.
3018
3019 <https://github.com/libnet/libnet>
3020
3022 Suggestions, bug reports/fixes, and pull requests, see:
3023
3024 <https://github.com/libnet/libnet/issues>
3025
3027 libnet is licensed under the 3-Clause BSD License.
3028
3030 libnet(3)
3031
3033 The original author of libnet is Mike D. Schiffman.
3034
3035 libnet has been maintained and extensively enhanced since 2009 by Sam
3036 Roberts.
3037
3038 It is maintained by the Libnet Developer Community at GitHub.
3039
3040 <https://github.com/libnet/libnet>
3041
3043 Suggestions, bug reports/fixes, and pull requests, see:
3044
3045 <https://github.com/libnet/libnet/issues>
3046
3048 libnet is licensed under the 3-Clause BSD License.
3049
3051 libnet(3)
3052
3054 The original author of libnet is Mike D. Schiffman.
3055
3056 libnet has been maintained and extensively enhanced since 2009 by Sam
3057 Roberts.
3058
3059 It is maintained by the Libnet Developer Community at GitHub.
3060
3061 <https://github.com/libnet/libnet>
3062
3064 Suggestions, bug reports/fixes, and pull requests, see:
3065
3066 <https://github.com/libnet/libnet/issues>
3067
3069 libnet is licensed under the 3-Clause BSD License.
3070
3072 libnet(3)
3073
3075 The original author of libnet is Mike D. Schiffman.
3076
3077 libnet has been maintained and extensively enhanced since 2009 by Sam
3078 Roberts.
3079
3080 It is maintained by the Libnet Developer Community at GitHub.
3081
3082 <https://github.com/libnet/libnet>
3083
3085 Suggestions, bug reports/fixes, and pull requests, see:
3086
3087 <https://github.com/libnet/libnet/issues>
3088
3090 libnet is licensed under the 3-Clause BSD License.
3091
3092
3093
3094libnet-1.2 Thu Jul 22 2021 libnet-functions.h(3)