libnet 1.1
|
00001 /* 00002 * $Id: libnet-functions_8h_source.html,v 1.1.1.1 2013/07/22 11:54:41 misho Exp $ 00003 * 00004 * libnet-functions.h - function prototypes 00005 * 00006 * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com> 00007 * All rights reserved. 00008 * 00009 * Redistribution and use in source and binary forms, with or without 00010 * modification, are permitted provided that the following conditions 00011 * are met: 00012 * 1. Redistributions of source code must retain the above copyright 00013 * notice, this list of conditions and the following disclaimer. 00014 * 2. Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in the 00016 * documentation and/or other materials provided with the distribution. 00017 * 00018 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 00019 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 00022 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00023 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00024 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00025 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00026 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00027 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00028 * SUCH DAMAGE. 00029 * 00030 */ 00031 00032 #ifndef __LIBNET_FUNCTIONS_H 00033 #define __LIBNET_FUNCTIONS_H 00034 00063 libnet_t * 00064 libnet_init(int injection_type, const char *device, char *err_buf); 00065 00071 void 00072 libnet_destroy(libnet_t *l); 00073 00080 void 00081 libnet_clear_packet(libnet_t *l); 00082 00089 void 00090 libnet_stats(libnet_t *l, struct libnet_stats *ls); 00091 00097 int 00098 libnet_getfd(libnet_t *l); 00099 00106 const char * 00107 libnet_getdevice(libnet_t *l); 00108 00117 uint8_t * 00118 libnet_getpbuf(libnet_t *l, libnet_ptag_t ptag); 00119 00128 uint32_t 00129 libnet_getpbuf_size(libnet_t *l, libnet_ptag_t ptag); 00130 00138 char * 00139 libnet_geterror(libnet_t *l); 00140 00147 uint32_t 00148 libnet_getpacket_size(libnet_t *l); 00149 00155 int 00156 libnet_seed_prand(libnet_t *l); 00157 00171 uint32_t 00172 libnet_get_prand(int mod); 00173 00195 int 00196 libnet_toggle_checksum(libnet_t *l, libnet_ptag_t ptag, int mode); 00197 00210 char * 00211 libnet_addr2name4(uint32_t in, uint8_t use_name); 00212 00226 uint32_t 00227 libnet_name2addr4(libnet_t *l, char *host_name, uint8_t use_name); 00228 00229 extern const struct libnet_in6_addr in6addr_error; 00230 00236 int 00237 libnet_in6_is_error(struct libnet_in6_addr addr); 00238 00252 struct libnet_in6_addr 00253 libnet_name2addr6(libnet_t *l, const char *host_name, uint8_t use_name); 00254 00258 void 00259 libnet_addr2name6_r(struct libnet_in6_addr addr, uint8_t use_name, 00260 char *host_name, int host_name_len); 00261 00277 int 00278 libnet_plist_chain_new(libnet_t *l, libnet_plist_t **plist, char *token_list); 00279 00291 int 00292 libnet_plist_chain_next_pair(libnet_plist_t *plist, uint16_t *bport, 00293 uint16_t *eport); 00294 00301 int 00302 libnet_plist_chain_dump(libnet_plist_t *plist); 00303 00312 char * 00313 libnet_plist_chain_dump_string(libnet_plist_t *plist); 00314 00320 int 00321 libnet_plist_chain_free(libnet_plist_t *plist); 00322 00410 libnet_ptag_t 00411 libnet_build_802_1q(const uint8_t *dst, const uint8_t *src, uint16_t tpi, 00412 uint8_t priority, uint8_t cfi, uint16_t vlan_id, uint16_t len_proto, 00413 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00414 00426 libnet_ptag_t 00427 libnet_build_802_1x(uint8_t eap_ver, uint8_t eap_type, uint16_t length, 00428 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00429 00441 libnet_ptag_t 00442 libnet_build_802_2(uint8_t dsap, uint8_t ssap, uint8_t control, 00443 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00444 00458 libnet_ptag_t 00459 libnet_build_802_2snap(uint8_t dsap, uint8_t ssap, uint8_t control, 00460 uint8_t *oui, uint16_t type, const uint8_t* payload, uint32_t payload_s, 00461 libnet_t *l, libnet_ptag_t ptag); 00462 00478 libnet_ptag_t 00479 libnet_build_802_3(const uint8_t *dst, const uint8_t *src, uint16_t len, 00480 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00481 00497 libnet_ptag_t 00498 libnet_build_ethernet(const uint8_t *dst, const uint8_t *src, uint16_t type, 00499 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00500 00512 libnet_ptag_t 00513 libnet_autobuild_ethernet(const uint8_t *dst, uint16_t type, libnet_t *l); 00514 00531 libnet_ptag_t 00532 libnet_build_fddi(uint8_t fc, const uint8_t *dst, const uint8_t *src, uint8_t dsap, 00533 uint8_t ssap, uint8_t cf, const uint8_t *oui, uint16_t type, const uint8_t* payload, 00534 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00535 00548 libnet_ptag_t 00549 libnet_autobuild_fddi(uint8_t fc, const uint8_t *dst, uint8_t dsap, uint8_t ssap, 00550 uint8_t cf, const uint8_t *oui, uint16_t type, libnet_t *l); 00551 00571 libnet_ptag_t 00572 libnet_build_arp(uint16_t hrd, uint16_t pro, uint8_t hln, uint8_t pln, 00573 uint16_t op, const uint8_t *sha, const uint8_t *spa, const uint8_t *tha, const uint8_t *tpa, 00574 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00575 00588 libnet_ptag_t 00589 libnet_autobuild_arp(uint16_t op, const uint8_t *sha, const uint8_t *spa, const uint8_t *tha, 00590 uint8_t *tpa, libnet_t *l); 00591 00609 libnet_ptag_t 00610 libnet_build_tcp(uint16_t sp, uint16_t dp, uint32_t seq, uint32_t ack, 00611 uint8_t control, uint16_t win, uint16_t sum, uint16_t urg, uint16_t len, 00612 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00613 00629 libnet_ptag_t 00630 libnet_build_tcp_options(const uint8_t *options, uint32_t options_s, libnet_t *l, 00631 libnet_ptag_t ptag); 00632 00645 libnet_ptag_t 00646 libnet_build_udp(uint16_t sp, uint16_t dp, uint16_t len, uint16_t sum, 00647 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00648 00668 libnet_ptag_t 00669 libnet_build_cdp(uint8_t version, uint8_t ttl, uint16_t sum, uint16_t type, 00670 uint16_t value_s, const uint8_t *value, const uint8_t* payload, uint32_t payload_s, 00671 libnet_t *l, libnet_ptag_t ptag); 00672 00687 libnet_ptag_t 00688 libnet_build_icmpv4_echo(uint8_t type, uint8_t code, uint16_t sum, 00689 uint16_t id, uint16_t seq, const uint8_t* payload, uint32_t payload_s, 00690 libnet_t *l, libnet_ptag_t ptag); 00691 00707 libnet_ptag_t 00708 libnet_build_icmpv4_mask(uint8_t type, uint8_t code, uint16_t sum, 00709 uint16_t id, uint16_t seq, uint32_t mask, const uint8_t* payload, 00710 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00711 00725 libnet_ptag_t 00726 libnet_build_icmpv4_unreach(uint8_t type, uint8_t code, uint16_t sum, 00727 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00728 00743 libnet_ptag_t 00744 libnet_build_icmpv4_redirect(uint8_t type, uint8_t code, uint16_t sum, 00745 uint32_t gateway, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 00746 libnet_ptag_t ptag); 00747 00762 libnet_ptag_t 00763 libnet_build_icmpv4_timeexceed(uint8_t type, uint8_t code, uint16_t sum, 00764 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00765 00783 libnet_ptag_t 00784 libnet_build_icmpv4_timestamp(uint8_t type, uint8_t code, uint16_t sum, 00785 uint16_t id, uint16_t seq, uint32_t otime, uint32_t rtime, uint32_t ttime, 00786 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00787 00802 libnet_ptag_t libnet_build_icmpv6_echo(uint8_t type, uint8_t code, uint16_t 00803 sum, uint16_t id, uint16_t seq, uint8_t *payload, uint32_t payload_s, 00804 libnet_t *l, libnet_ptag_t ptag); 00805 00819 libnet_ptag_t 00820 libnet_build_icmpv6_unreach(uint8_t type, uint8_t code, uint16_t sum, 00821 uint8_t *payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00822 00837 libnet_ptag_t libnet_build_icmpv6_ndp_nsol(uint8_t type, uint8_t code, 00838 uint16_t sum, struct libnet_in6_addr target, uint8_t *payload, uint32_t 00839 payload_s, libnet_t* l, libnet_ptag_t ptag); 00840 00856 libnet_ptag_t libnet_build_icmpv6_ndp_nadv(uint8_t type, uint8_t code, 00857 uint16_t sum, uint32_t flags, struct libnet_in6_addr target, uint8_t 00858 *payload, uint32_t payload_s, libnet_t* l, libnet_ptag_t ptag); 00859 00869 libnet_ptag_t libnet_build_icmpv6_ndp_opt(uint8_t type, uint8_t* option, 00870 uint32_t option_s, libnet_t* l, libnet_ptag_t ptag); 00871 00886 libnet_ptag_t 00887 libnet_build_igmp(uint8_t type, uint8_t reserved, uint16_t sum, uint32_t ip, 00888 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00889 00909 libnet_ptag_t 00910 libnet_build_ipv4(uint16_t ip_len, uint8_t tos, uint16_t id, uint16_t frag, 00911 uint8_t ttl, uint8_t prot, uint16_t sum, uint32_t src, uint32_t dst, 00912 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00913 00932 libnet_ptag_t 00933 libnet_build_ipv4_options(const uint8_t *options, uint32_t options_s, libnet_t *l, 00934 libnet_ptag_t ptag); 00935 00949 libnet_ptag_t 00950 libnet_autobuild_ipv4(uint16_t len, uint8_t prot, uint32_t dst, libnet_t *l); 00951 00967 libnet_ptag_t 00968 libnet_build_ipv6(uint8_t tc, uint32_t fl, uint16_t len, uint8_t nh, 00969 uint8_t hl, struct libnet_in6_addr src, struct libnet_in6_addr dst, 00970 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 00971 00984 libnet_ptag_t 00985 libnet_build_ipv6_frag(uint8_t nh, uint8_t reserved, uint16_t frag, 00986 uint32_t id, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 00987 libnet_ptag_t ptag); 00988 01006 libnet_ptag_t 01007 libnet_build_ipv6_routing(uint8_t nh, uint8_t len, uint8_t rtype, 01008 uint8_t segments, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01009 libnet_ptag_t ptag); 01010 01024 libnet_ptag_t 01025 libnet_build_ipv6_destopts(uint8_t nh, uint8_t len, const uint8_t* payload, 01026 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01027 01042 libnet_ptag_t 01043 libnet_build_ipv6_hbhopts(uint8_t nh, uint8_t len, const uint8_t* payload, 01044 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01045 01062 libnet_ptag_t 01063 libnet_autobuild_ipv6(uint16_t len, uint8_t nh, struct libnet_in6_addr dst, 01064 libnet_t *l, libnet_ptag_t ptag); 01065 01083 libnet_ptag_t 01084 libnet_build_isl(uint8_t *dhost, uint8_t type, uint8_t user, 01085 uint8_t *shost, uint16_t len, const uint8_t *snap, uint16_t vid, 01086 uint16_t portindex, uint16_t reserved, const uint8_t* payload, 01087 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01088 01100 libnet_ptag_t 01101 libnet_build_ipsec_esp_hdr(uint32_t spi, uint32_t seq, uint32_t iv, 01102 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01103 01115 libnet_ptag_t 01116 libnet_build_ipsec_esp_ftr(uint8_t len, uint8_t nh, int8_t *auth, 01117 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01118 01133 libnet_ptag_t 01134 libnet_build_ipsec_ah(uint8_t nh, uint8_t len, uint16_t res, 01135 uint32_t spi, uint32_t seq, uint32_t auth, const uint8_t* payload, 01136 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01137 01154 libnet_ptag_t 01155 libnet_build_dnsv4(uint16_t h_len, uint16_t id, uint16_t flags, 01156 uint16_t num_q, uint16_t num_anws_rr, uint16_t num_auth_rr, 01157 uint16_t num_addi_rr, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01158 libnet_ptag_t ptag); 01159 01177 libnet_ptag_t 01178 libnet_build_rip(uint8_t cmd, uint8_t version, uint16_t rd, uint16_t af, 01179 uint16_t rt, uint32_t addr, uint32_t mask, uint32_t next_hop, 01180 uint32_t metric, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01181 libnet_ptag_t ptag); 01182 01205 libnet_ptag_t 01206 libnet_build_rpc_call(uint32_t rm, uint32_t xid, uint32_t prog_num, 01207 uint32_t prog_vers, uint32_t procedure, uint32_t cflavor, uint32_t clength, 01208 uint8_t *cdata, uint32_t vflavor, uint32_t vlength, const uint8_t *vdata, 01209 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01210 01233 libnet_ptag_t 01234 libnet_build_stp_conf(uint16_t id, uint8_t version, uint8_t bpdu_type, 01235 uint8_t flags, const uint8_t *root_id, uint32_t root_pc, const uint8_t *bridge_id, 01236 uint16_t port_id, uint16_t message_age, uint16_t max_age, 01237 uint16_t hello_time, uint16_t f_delay, const uint8_t* payload, 01238 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01239 01253 libnet_ptag_t 01254 libnet_build_stp_tcn(uint16_t id, uint8_t version, uint8_t bpdu_type, 01255 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01256 01274 libnet_ptag_t 01275 libnet_build_token_ring(uint8_t ac, uint8_t fc, const uint8_t *dst, const uint8_t *src, 01276 uint8_t dsap, uint8_t ssap, uint8_t cf, const uint8_t *oui, uint16_t type, 01277 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01278 01292 libnet_ptag_t 01293 libnet_autobuild_token_ring(uint8_t ac, uint8_t fc, const uint8_t *dst, 01294 uint8_t dsap, uint8_t ssap, uint8_t cf, const uint8_t *oui, uint16_t type, 01295 libnet_t *l); 01296 01316 libnet_ptag_t 01317 libnet_build_vrrp(uint8_t version, uint8_t type, uint8_t vrouter_id, 01318 uint8_t priority, uint8_t ip_count, uint8_t auth_type, uint8_t advert_int, 01319 uint16_t sum, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01320 libnet_ptag_t ptag); 01321 01334 libnet_ptag_t 01335 libnet_build_mpls(uint32_t label, uint8_t experimental, uint8_t bos, 01336 uint8_t ttl, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01337 libnet_ptag_t ptag); 01338 01366 libnet_ptag_t 01367 libnet_build_ntp(uint8_t leap_indicator, uint8_t version, uint8_t mode, 01368 uint8_t stratum, uint8_t poll, uint8_t precision, uint16_t delay_int, 01369 uint16_t delay_frac, uint16_t dispersion_int, uint16_t dispersion_frac, 01370 uint32_t reference_id, uint32_t ref_ts_int, uint32_t ref_ts_frac, 01371 uint32_t orig_ts_int, uint32_t orig_ts_frac, uint32_t rec_ts_int, 01372 uint32_t rec_ts_frac, uint32_t xmt_ts_int, uint32_t xmt_ts_frac, 01373 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01374 01388 libnet_ptag_t 01389 libnet_build_ospfv2(uint16_t len, uint8_t type, uint32_t rtr_id, 01390 uint32_t area_id, uint16_t sum, uint16_t autype, const uint8_t* payload, 01391 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01392 01407 libnet_ptag_t 01408 libnet_build_ospfv2_hello(uint32_t netmask, uint16_t interval, uint8_t opts, 01409 uint8_t priority, uint dead_int, uint32_t des_rtr, uint32_t bkup_rtr, 01410 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01411 01423 libnet_ptag_t 01424 libnet_build_ospfv2_dbd(uint16_t dgram_len, uint8_t opts, uint8_t type, 01425 uint seqnum, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01426 libnet_ptag_t ptag); 01427 01438 libnet_ptag_t 01439 libnet_build_ospfv2_lsr(uint type, uint lsid, uint32_t advrtr, 01440 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01441 01450 libnet_ptag_t 01451 libnet_build_ospfv2_lsu(uint num, const uint8_t* payload, uint32_t payload_s, 01452 libnet_t *l, libnet_ptag_t ptag); 01453 01469 libnet_ptag_t 01470 libnet_build_ospfv2_lsa(uint16_t age, uint8_t opts, uint8_t type, 01471 uint lsid, uint32_t advrtr, uint seqnum, uint16_t sum, uint16_t len, 01472 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01473 01488 libnet_ptag_t 01489 libnet_build_ospfv2_lsa_rtr(uint16_t flags, uint16_t num, uint id, 01490 uint data, uint8_t type, uint8_t tos, uint16_t metric, const uint8_t* payload, 01491 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01492 01502 libnet_ptag_t 01503 libnet_build_ospfv2_lsa_net(uint32_t nmask, uint rtrid, const uint8_t* payload, 01504 uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01505 01516 libnet_ptag_t 01517 libnet_build_ospfv2_lsa_sum(uint32_t nmask, uint metric, uint tos, 01518 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01519 01531 libnet_ptag_t 01532 libnet_build_ospfv2_lsa_as(uint32_t nmask, uint metric, uint32_t fwdaddr, 01533 uint tag, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01534 libnet_ptag_t ptag); 01535 01547 libnet_ptag_t 01548 libnet_build_data(const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01549 libnet_ptag_t ptag); 01550 01572 libnet_ptag_t 01573 libnet_build_dhcpv4(uint8_t opcode, uint8_t htype, uint8_t hlen, 01574 uint8_t hopcount, uint32_t xid, uint16_t secs, uint16_t flags, 01575 uint32_t cip, uint32_t yip, uint32_t sip, uint32_t gip, const uint8_t *chaddr, 01576 const char *sname, const char *file, const uint8_t* payload, uint32_t payload_s, 01577 libnet_t *l, libnet_ptag_t ptag); 01578 01600 libnet_ptag_t 01601 libnet_build_bootpv4(uint8_t opcode, uint8_t htype, uint8_t hlen, 01602 uint8_t hopcount, uint32_t xid, uint16_t secs, uint16_t flags, 01603 uint32_t cip, uint32_t yip, uint32_t sip, uint32_t gip, const uint8_t *chaddr, 01604 const char *sname, const char *file, const uint8_t* payload, uint32_t payload_s, 01605 libnet_t *l, libnet_ptag_t ptag); 01606 01611 uint32_t 01612 libnet_getgre_length(uint16_t fv); 01613 01636 libnet_ptag_t 01637 libnet_build_gre(uint16_t fv, uint16_t type, uint16_t sum, 01638 uint16_t offset, uint32_t key, uint32_t seq, uint16_t len, 01639 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01640 01662 libnet_ptag_t 01663 libnet_build_egre(uint16_t fv, uint16_t type, uint16_t sum, 01664 uint16_t offset, uint32_t key, uint32_t seq, uint16_t len, 01665 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01666 01678 libnet_ptag_t 01679 libnet_build_gre_sre(uint16_t af, uint8_t offset, uint8_t length, 01680 uint8_t *routing, const uint8_t* payload, uint32_t payload_s, libnet_t *l, 01681 libnet_ptag_t ptag); 01682 01688 libnet_ptag_t 01689 libnet_build_gre_last_sre(libnet_t *l, libnet_ptag_t ptag); 01690 01712 libnet_ptag_t 01713 libnet_build_bgp4_header(uint8_t marker[LIBNET_BGP4_MARKER_SIZE], 01714 uint16_t len, uint8_t type, const uint8_t* payload, uint32_t payload_s, 01715 libnet_t *l, libnet_ptag_t ptag); 01716 01733 libnet_ptag_t 01734 libnet_build_bgp4_open(uint8_t version, uint16_t src_as, uint16_t hold_time, 01735 uint32_t bgp_id, uint8_t opt_len, const uint8_t* payload, uint32_t payload_s, 01736 libnet_t *l, libnet_ptag_t ptag); 01737 01753 libnet_ptag_t 01754 libnet_build_bgp4_update(uint16_t unfeasible_rt_len, const uint8_t *withdrawn_rt, 01755 uint16_t total_path_attr_len, const uint8_t *path_attributes, uint16_t info_len, 01756 uint8_t *reachability_info, const uint8_t* payload, uint32_t payload_s, 01757 libnet_t *l, libnet_ptag_t ptag); 01758 01771 libnet_ptag_t 01772 libnet_build_bgp4_notification(uint8_t err_code, uint8_t err_subcode, 01773 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01774 01796 libnet_ptag_t 01797 libnet_build_sebek(uint32_t magic, uint16_t version, uint16_t type, 01798 uint32_t counter, uint32_t time_sec, uint32_t time_usec, uint32_t pid, 01799 uint32_t uid, uint32_t fd, uint8_t cmd[SEBEK_CMD_LENGTH], uint32_t length, 01800 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01801 01821 libnet_ptag_t 01822 libnet_build_hsrp(uint8_t version, uint8_t opcode, uint8_t state, 01823 uint8_t hello_time, uint8_t hold_time, uint8_t priority, uint8_t group, 01824 uint8_t reserved, uint8_t authdata[HSRP_AUTHDATA_LENGTH], uint32_t virtual_ip, 01825 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01826 01841 libnet_ptag_t 01842 libnet_build_link(const uint8_t *dst, const uint8_t *src, const uint8_t *oui, uint16_t type, 01843 const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag); 01844 01855 libnet_ptag_t 01856 libnet_autobuild_link(const uint8_t *dst, const uint8_t *oui, uint16_t type, 01857 libnet_t *l); 01858 01871 int 01872 libnet_write(libnet_t *l); 01873 01883 uint32_t 01884 libnet_get_ipaddr4(libnet_t *l); 01885 01895 struct libnet_in6_addr 01896 libnet_get_ipaddr6(libnet_t *l); 01897 01906 struct libnet_ether_addr * 01907 libnet_get_hwaddr(libnet_t *l); 01908 01918 uint8_t * 01919 libnet_hex_aton(const char *s, int *len); 01920 01925 const char * 01926 libnet_version(void); 01927 01943 int 01944 libnet_adv_cull_packet(libnet_t *l, uint8_t **packet, uint32_t *packet_s); 01945 01958 int 01959 libnet_adv_cull_header(libnet_t *l, libnet_ptag_t ptag, uint8_t **header, 01960 uint32_t *header_s); 01961 01975 int 01976 libnet_adv_write_link(libnet_t *l, const uint8_t *packet, uint32_t packet_s); 01977 01991 int 01992 libnet_adv_write_raw_ipv4(libnet_t *l, const uint8_t *packet, uint32_t packet_s); 01993 02000 void 02001 libnet_adv_free_packet(libnet_t *l, uint8_t *packet); 02002 02016 int 02017 libnet_cq_add(libnet_t *l, char *label); 02018 02033 libnet_t * 02034 libnet_cq_remove(libnet_t *l); 02035 02047 libnet_t * 02048 libnet_cq_remove_by_label(char *label); 02049 02056 const char * 02057 libnet_cq_getlabel(libnet_t *l); 02058 02065 libnet_t * 02066 libnet_cq_find_by_label(char *label); 02067 02073 void 02074 libnet_cq_destroy(void); 02075 02095 libnet_t * 02096 libnet_cq_head(void); 02097 02103 int 02104 libnet_cq_last(void); 02105 02111 libnet_t * 02112 libnet_cq_next(void); 02113 02119 uint32_t 02120 libnet_cq_size(void); 02121 02125 uint32_t 02126 libnet_cq_end_loop(void); 02127 02133 void 02134 libnet_diag_dump_context(libnet_t *l); 02135 02141 void 02142 libnet_diag_dump_pblock(libnet_t *l); 02143 02150 char * 02151 libnet_diag_dump_pblock_type(uint8_t type); 02152 02166 void 02167 libnet_diag_dump_hex(const uint8_t *packet, uint32_t len, int swap, FILE *stream); 02168 02169 /* 02170 * [Internal] 02171 */ 02172 int 02173 libnet_write_raw_ipv4(libnet_t *l, const uint8_t *packet, uint32_t size); 02174 02175 /* 02176 * [Internal] 02177 */ 02178 int 02179 libnet_write_raw_ipv6(libnet_t *l, const uint8_t *packet, uint32_t size); 02180 02181 /* 02182 * [Internal] 02183 */ 02184 int 02185 libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size); 02186 02187 #if ((__WIN32__) && !(__CYGWIN__)) 02188 /* 02189 * [Internal] 02190 */ 02191 SOCKET 02192 libnet_open_raw4(libnet_t *l); 02193 #else 02194 /* 02195 * [Internal] 02196 */ 02197 int 02198 libnet_open_raw4(libnet_t *l); 02199 #endif 02200 02201 /* 02202 * [Internal] 02203 */ 02204 int 02205 libnet_close_raw4(libnet_t *l); 02206 02207 /* 02208 * [Internal] 02209 */ 02210 int 02211 libnet_open_raw6(libnet_t *l); 02212 02213 /* 02214 * [Internal] 02215 */ 02216 int 02217 libnet_close_raw6(libnet_t *l); 02218 02219 /* 02220 * [Internal] 02221 */ 02222 int 02223 libnet_select_device(libnet_t *l); 02224 02225 /* 02226 * [Internal] 02227 */ 02228 int 02229 libnet_open_link(libnet_t *l); 02230 02231 /* 02232 * [Internal] 02233 */ 02234 int 02235 libnet_close_link(libnet_t *l); 02236 02237 /* 02238 * [Internal] 02239 * THIS FUNCTION IS BROKEN. IT WILL SEGFAULT OR CORRUPT MEMORY, OR JUST SILENTLY DO THE 02240 * WRONG THING IF NOT CALLED CORRECTLY, AND CALLING IT CORRECTLY IS UNDOCUMENTED, AND 02241 * ALMOST IMPOSSIBLE. YOU HAVE BEEN WARNED. 02242 */ 02243 int 02244 libnet_do_checksum(libnet_t *l, uint8_t *iphdr, int protocol, int h_len); 02245 02246 /* Calculate internet checksums. 02247 * 02248 * IP (TCP, UDP, IGMP, ICMP, etc...) checksums usually need information from 02249 * the IP header to construct the "pseudo header", this function takes a 02250 * pointer to that header, the buffer boundaries, the "h_len" (see pblock_t for 02251 * a description, it is increasinly unused, though, and I'm trying to remove it 02252 * altogether), and the protocol number for the protocol that is to be 02253 * checksummed. 02254 * 02255 * Finding that protocol requires that the IP header be well-formed... so this 02256 * won't work well for invalid packets. But then, what is the valid checksum 02257 * for a valid packet, anyhow? 02258 * 02259 * This doesn't work well for non-inet checksums, sorry, that's an original design 02260 * flaw. pblock_t needs a pointer in it, to a packet assembly function that can be 02261 * called at runtime to do assembly and checksumming. 02262 */ 02263 int 02264 libnet_inet_checksum(libnet_t *l, uint8_t *iphdr, int protocol, int h_len, const uint8_t *beg, const uint8_t * end); 02265 02266 /* 02267 * [Internal] 02268 */ 02269 uint32_t 02270 libnet_compute_crc(uint8_t *buf, uint32_t len); 02271 02272 /* 02273 * [Internal] 02274 */ 02275 uint16_t 02276 libnet_ip_check(uint16_t *addr, int len); 02277 02278 /* 02279 * [Internal] 02280 */ 02281 int 02282 libnet_in_cksum(uint16_t *addr, int len); 02283 02284 /* 02285 * [Internal] 02286 * If ptag is 0, function will create a pblock for the protocol unit type, 02287 * append it to the list and return a pointer to it. If ptag is not 0, 02288 * function will search the pblock list for the specified protocol block 02289 * and return a pointer to it. 02290 */ 02291 libnet_pblock_t * 02292 libnet_pblock_probe(libnet_t *l, libnet_ptag_t ptag, uint32_t b_len, 02293 uint8_t type); 02294 02295 /* 02296 * [Internal] 02297 * Function creates the pblock list if l->protocol_blocks == NULL or appends 02298 * an entry to the doubly linked list. 02299 */ 02300 libnet_pblock_t * 02301 libnet_pblock_new(libnet_t *l, uint32_t b_len); 02302 02303 /* 02304 * [Internal] 02305 * Function swaps two pblocks in memory. 02306 */ 02307 int 02308 libnet_pblock_swap(libnet_t *l, libnet_ptag_t ptag1, libnet_ptag_t ptag2); 02309 02310 /* 02311 * [Internal] 02312 * Function inserts ptag2 before ptag1 in the doubly linked list. 02313 */ 02314 int 02315 libnet_pblock_insert_before(libnet_t *l, libnet_ptag_t ptag1, 02316 libnet_ptag_t ptag2); 02317 02318 /* 02319 * [Internal] 02320 * Function removes a pblock from context 02321 */ 02322 void 02323 libnet_pblock_delete(libnet_t *l, libnet_pblock_t *p); 02324 02325 /* 02326 * [Internal] 02327 * Function updates the pblock meta-inforation. Internally it updates the 02328 * ptag with a monotonically increasing variable kept in l. This way each 02329 * pblock has a succesively increasing ptag identifier. 02330 */ 02331 libnet_ptag_t 02332 libnet_pblock_update(libnet_t *l, libnet_pblock_t *p, uint32_t h, uint8_t type); 02333 02334 02335 /* 02336 * [Internal] 02337 * Function locates a given block by it's ptag. 02338 */ 02339 libnet_pblock_t * 02340 libnet_pblock_find(libnet_t *l, libnet_ptag_t ptag); 02341 02342 /* 02343 * [Internal] 02344 * Function copies protocol block data over. 02345 */ 02346 int 02347 libnet_pblock_append(libnet_t *l, libnet_pblock_t *p, const void *buf, uint32_t len); 02348 02349 /* 02350 * [Internal] 02351 * Function sets pblock flags. 02352 */ 02353 void 02354 libnet_pblock_setflags(libnet_pblock_t *p, uint8_t flags); 02355 02356 /* 02357 * [Internal] 02358 * Function returns the protocol number for the protocol block type. If 02359 * the type is unknown, the function defaults to returning IPPROTO_IP. 02360 */ 02361 int 02362 libnet_pblock_p2p(uint8_t type); 02363 02364 /* 02365 * [Internal] 02366 * Function assembles the protocol blocks into a packet, checksums are 02367 * calculated if that was requested. 02368 */ 02369 int 02370 libnet_pblock_coalesce(libnet_t *l, uint8_t **packet, uint32_t *size); 02371 02372 #if !(__WIN32__) 02373 /* 02374 * [Internal] 02375 * By testing if we can retrieve the FLAGS of an iface 02376 * we can know if it exists or not and if it is up. 02377 */ 02378 int 02379 libnet_check_iface(libnet_t *l); 02380 #endif 02381 02382 #if defined(__WIN32__) 02383 /* 02384 * [Internal] 02385 */ 02386 BYTE * 02387 libnet_win32_get_remote_mac(libnet_t *l, DWORD IP); 02388 02389 /* 02390 * [Internal] 02391 */ 02392 int 02393 libnet_close_link_interface(libnet_t *l); 02394 02395 /* 02396 * [Internal] 02397 */ 02398 BYTE * 02399 libnet_win32_read_arp_table(DWORD IP); 02400 #endif 02401 #endif /* __LIBNET_FUNCTIONS_H */ 02402 02403 /* EOF */