/*- -- ptag = net:data{payload=STR, ptag=int} Build generic data packet inside net context. ptag is optional, defaults to creating a new protocol block */ static int lnet_data (lua_State *L) { libnet_t* ud = checkudata(L); uint32_t payloadsz = 0; const uint8_t* payload = checkpayload(L, 2, &payloadsz); int ptag = lnet_arg_ptag(L, ud, 2, LIBNET_PBLOCK_DATA_H); ptag = libnet_build_data(payload, payloadsz, ud, ptag); check_error(L, ud, ptag); lua_pushinteger(L, ptag); return 1; }
int main(int argc, char *argv[]) { int c, len; libnet_t *l; libnet_ptag_t t; u_char *value; u_char values[100]; u_short tmp; u_long tmp2; char *device = NULL; char errbuf[LIBNET_ERRBUF_SIZE]; printf("libnet 1.1 packet shaping: CDP[link]\n"); /* * Initialize the library. Root priviledges are required. */ l = libnet_init( LIBNET_LINK, /* injection type */ device, /* network interface */ errbuf); /* errbuf */ if (l == NULL) { fprintf(stderr, "libnet_init() failed: %s", errbuf); exit(EXIT_FAILURE); } value = "switch"; len = strlen(value); t = libnet_build_cdp( 1, /* version */ 30, /* time to live */ 0, /* checksum */ LIBNET_CDP_DEVID, /* type */ len, /* length */ value, /* value */ NULL, /* payload */ 0, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build CDP header: %s\n", libnet_geterror(l)); goto bad; } memset(values, 0, sizeof(values)); tmp = htons(LIBNET_CDP_PORTID); memcpy(values, &tmp, 2); tmp = htons(0x0014); memcpy(values + 2, &tmp, 2); memcpy(values + 4, (u_char *)"FastEthernet0/20", 16); t = libnet_build_data( values, 20, l, 0); if (t == -1) { fprintf(stderr, "Can't build CDP data: %s\n", libnet_geterror(l)); goto bad; } memset(values, 0, sizeof(values)); tmp = htons(LIBNET_CDP_CAPABIL); memcpy(values, &tmp, 2); tmp = htons(0x0008); memcpy(values + 2, &tmp, 2); tmp2 = htonl((LIBNET_CDP_CAP_L2S | LIBNET_CDP_CAP_L2B)); memcpy(values + 4, &tmp2, 4); t = libnet_build_data( values, 8, l, 0); if (t == -1) { fprintf(stderr, "Can't build CDP data: %s\n", libnet_geterror(l)); goto bad; } memset(values, 0, sizeof(values)); tmp = htons(LIBNET_CDP_VERSION); memcpy(values, &tmp, 2); tmp = htons(0x001f); memcpy(values + 2, &tmp, 2); memcpy(values + 4, (u_char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26); t = libnet_build_data( values, 31, l, 0); if (t == -1) { fprintf(stderr, "Can't build CDP data: %s\n", libnet_geterror(l)); goto bad; } memset(values, 0, sizeof(values)); tmp = htons(LIBNET_CDP_PLATFORM); memcpy(values, &tmp, 2); tmp = htons(0x0015); memcpy(values + 2, &tmp, 2); memcpy(values + 4, (u_char *)"cisco WS-C2924-XL", 17); t = libnet_build_data( values, 21, l, 0); if (t == -1) { fprintf(stderr, "Can't build CDP data: %s\n", libnet_geterror(l)); goto bad; } t = libnet_build_ethernet( enet_dst, /* ethernet destination */ enet_src, /* ethernet source */ 0x2000, /* protocol type */ NULL, /* payload */ 0, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build ethernet header: %s\n", libnet_geterror(l)); goto bad; } /* * Write it to the wire. */ c = libnet_write(l); if (c == -1) { fprintf(stderr, "Write error: %s\n", libnet_geterror(l)); goto bad; } else { fprintf(stderr, "Wrote %d byte CDP packet; check the wire.\n", c); } libnet_destroy(l); return (EXIT_SUCCESS); bad: libnet_destroy(l); return (EXIT_FAILURE); }
int main(int argc, char **argv) { int c; libnet_t *l; libnet_ptag_t t; u_long src, dst, nbr; char errbuf[LIBNET_ERRBUF_SIZE]; u_char *to, *from, *neighbor; u_char auth[8] = {0,0,0,0,0,0,0,0}; printf("libnet 1.1 OSPF Hello packet shaping[raw]\n"); if (argc != 4) { usage(argv[0]); } from = argv[1]; to = argv[2]; neighbor = argv[3]; /* * Initialize the library. Root priviledges are required. */ l = libnet_init( LIBNET_RAW4, /* injection type */ NULL, /* network interface */ errbuf); /* errbuf */ if (l == NULL) { fprintf(stderr, "libnet_init() failed: %s", errbuf); exit(EXIT_FAILURE); } /* Too lazy to check for error */ src = libnet_name2addr4(l, from, LIBNET_DONT_RESOLVE); dst = libnet_name2addr4(l, to, LIBNET_DONT_RESOLVE); nbr = libnet_name2addr4(l, neighbor, LIBNET_DONT_RESOLVE); t = libnet_build_ospfv2_hello( 0xffffffff, /* netmask */ 2, /* interval */ 0x00, /* options */ 0x00, /* priority */ 30, /* dead int */ src, /* router */ src, /* router */ nbr, /* neighbor */ NULL, /* payload */ 0, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build OSPF HELLO header: %s\n", libnet_geterror(l)); goto bad; } /* authentication data */ t = libnet_build_data( auth, /* auth data */ LIBNET_OSPF_AUTH_H, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build OSPF auth header: %s\n", libnet_geterror(l)); goto bad; } t = libnet_build_ospfv2( LIBNET_OSPF_HELLO_H + LIBNET_OSPF_AUTH_H, /* OSPF packet length */ LIBNET_OSPF_HELLO, /* OSPF packet type */ htonl(0xd000000d), /* router id */ htonl(0xc0ffee00), /* area id */ 0, /* checksum */ LIBNET_OSPF_AUTH_NULL, /* auth type */ NULL, /* payload */ 0, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build OSPF header: %s\n", libnet_geterror(l)); goto bad; } t = libnet_build_ipv4( LIBNET_IPV4_H + LIBNET_OSPF_H + LIBNET_OSPF_HELLO_H + LIBNET_OSPF_AUTH_H, /* packet total legnth */ 0, /* TOS */ 101, /* IP iD */ IP_DF, /* IP frag */ 254, /* TTL */ IPPROTO_OSPF, /* protocol */ 0, /* checksum */ src, /* source IP */ dst, /* destination IP */ NULL, /* payload */ 0, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build IP header: %s\n", libnet_geterror(l)); goto bad; } /* * Write it to the wire. */ c = libnet_write(l); if (c == -1) { fprintf(stderr, "Write error: %s\n", libnet_geterror(l)); goto bad; } else { fprintf(stderr, "Wrote %d byte OSPF packet; check the wire.\n", c); } libnet_destroy(l); return (EXIT_SUCCESS); bad: libnet_destroy(l); return (EXIT_FAILURE); }