int main(int argc, char **argv) { int warn, sock, len; u_char *pack; char *from, *to, *adrtr; u_long src, dest, advrouter, addaid, addrid; u_char auth[2]; if (argc != 4) help(argv[0]); from = argv[1]; to = argv[2]; adrtr = argv[3]; sock = libnet_open_raw_sock(IPPROTO_RAW); if (sock == -1) { perror("socket"); exit(-1); } src = libnet_name_resolve(from, 0); dest = libnet_name_resolve(to, 0); advrouter = libnet_name_resolve(adrtr, 0); addaid = 0xc0ffeeb0; addrid = 0xb00f00d0; len = LIBNET_IP_H + LIBNET_OSPF_H + LIBNET_AUTH_H + LIBNET_LSR_H; pack = (u_char *)malloc(len); libnet_build_ip(LIBNET_OSPF_H + LIBNET_AUTH_H + LIBNET_LSR_H, 0x00, (u_short)rand(), IP_DF, 0xff, IPPROTO_OSPF, src, dest, NULL, 0, pack); memset(auth, 0, sizeof(auth)); libnet_build_ospf(LIBNET_AUTH_H + LIBNET_LSR_H, LIBNET_OSPF_LSR, addrid, addaid, LIBNET_OSPF_AUTH_NULL, NULL, 0, pack + LIBNET_IP_H); LIBNET_OSPF_AUTHCPY(pack + LIBNET_IP_H + LIBNET_OSPF_H, auth); libnet_build_ospf_lsr(LIBNET_LS_TYPE_RTR, 0xffffffff, advrouter, NULL, 0, pack + LIBNET_IP_H + LIBNET_OSPF_H + LIBNET_AUTH_H); libnet_do_checksum(pack, IPPROTO_OSPF, len); warn = libnet_write_ip(sock, pack, len); if (warn == -1) { printf("Error writing packet to wire\n"); free(pack); } else { printf("%d bytes written\n", warn); } free(pack); return (0); }
int main(int argc, char **argv) { int sock, warn, len; u_char *pack, *to, *from, *neighbor; u_long src, dst, addaid, addrid, nbr, auth[2]; if (argc != 4) help(argv[0]); from = argv[1]; to = argv[2]; neighbor = argv[3]; len = LIBNET_OSPF_H + LIBNET_HELLO_H + LIBNET_IP_H + LIBNET_AUTH_H; pack = (u_char *)malloc(len); sock = libnet_open_raw_sock(IPPROTO_RAW); if (sock == -1) { perror("socket"); free(pack); exit(-1); } src = libnet_name_resolve(from, 0); dst = libnet_name_resolve(to, 0); nbr = libnet_name_resolve(neighbor, 0); addrid = 0x23696969; addaid = 0xc0ffee00; /* GENERIC : FAKE : ETC */ libnet_build_ip(LIBNET_OSPF_H + LIBNET_AUTH_H + LIBNET_HELLO_H, 0x00, 101, IP_DF, 254, IPPROTO_OSPF, src, dst, NULL, 0, pack); auth[0] = 0; auth[1] = 0; libnet_build_ospf(LIBNET_HELLO_H + LIBNET_AUTH_H, LIBNET_OSPF_HELLO, addrid, addaid, LIBNET_OSPF_AUTH_NULL, NULL, 0, pack + LIBNET_IP_H); LIBNET_OSPF_AUTHCPY(pack + LIBNET_IP_H + LIBNET_OSPF_H, auth); libnet_build_ospf_hello(0xffffffff, 2, 0x00, 0x00, 30, src, src, nbr, NULL, 0, pack + LIBNET_IP_H + LIBNET_OSPF_H + LIBNET_AUTH_H); libnet_do_checksum(pack, IPPROTO_OSPF, len); warn = libnet_write_ip(sock, pack, len); if (warn != len) { printf("Error sending: %d bytes written : %s\n", warn, strerror(errno)); free(pack); exit(warn); } else { printf("%d bytes written\n", warn); } free(pack); return (0); }
int main(int argc, char **argv) { int sock, warn, len; u_char *pack; char *from, *to; u_long src, dst, addrid, addaid, auth[2]; if (argc != 3) help(argv[0]); len = LIBNET_IP_H + LIBNET_OSPF_H + LIBNET_AUTH_H + LIBNET_LSA_H + LIBNET_LS_NET_LEN; pack = (u_char *)malloc(len); from = argv[1]; to = argv[2]; src = libnet_name_resolve(from, 0); dst = libnet_name_resolve(to, 0); addrid = 0xff00ff00; addaid = 0xd00dd00d; sock = libnet_open_raw_sock(IPPROTO_RAW); if (sock == -1) { perror("socket"); free(pack); exit(sock); } libnet_build_ip(LIBNET_OSPF_H + LIBNET_AUTH_H + LIBNET_LSA_H + LIBNET_LS_NET_LEN, 0x00, (u_short)rand(), IP_DF, 0xfe, IPPROTO_OSPF, src, dst, NULL, 0, pack); libnet_build_ospf(LIBNET_AUTH_H + LIBNET_LSA_H + LIBNET_LS_NET_LEN, LIBNET_OSPF_LSA, addrid, addaid, LIBNET_OSPF_AUTH_NULL, NULL, 0, pack + LIBNET_IP_H); memset(auth, 0, sizeof(auth)); LIBNET_OSPF_AUTHCPY(pack + LIBNET_OSPF_H + LIBNET_IP_H, auth); libnet_build_ospf_lsa(40, 0x00, LIBNET_LS_TYPE_NET, addrid, src, 0xf0f0f00f, LIBNET_LS_NET_LEN, NULL, 0, pack + LIBNET_AUTH_H + LIBNET_OSPF_H + LIBNET_IP_H); libnet_build_ospf_lsa_net(0xffffff00, 0xc0ffee00, NULL, 0, pack + LIBNET_LSA_H + LIBNET_AUTH_H + LIBNET_OSPF_H + LIBNET_IP_H); libnet_do_checksum(pack, IPPROTO_OSPF, len); libnet_do_checksum(pack + LIBNET_IP_H + LIBNET_OSPF_H + LIBNET_AUTH_H, IPPROTO_OSPF_LSA, LIBNET_LS_NET_LEN + LIBNET_LSA_H); warn = libnet_write_ip(sock, pack, len); if (warn == -1) { printf("Error writing packet to the wire\n"); free(pack); exit(warn); } printf("%d bytes written\n", warn); free(pack); return (0); }