/* Constructor */ Packet::Packet(const uint8_t *b, uint16_t len, struct timespec t) { build_pkt(b, len); ts = t; len_ = len; }
int main (int argc, char **argv) { libnet_t *l; char err_buf[LIBNET_ERRBUF_SIZE]; char *iface = NULL; char *src_s = NULL, *victim_s = NULL, *plist_s = NULL; libnet_plist_t *plist=NULL; struct libnet_in6_addr src, victim; int s = 0, d = 0, i = 0, p = 0, opt; libnet_ptag_t tcp_tag; u_long seq; extern char *optarg; extern int opterr; printf ("\n6pack - IPv6 Port Scanner - v0.0002 ( http://genhex.org/projects/6pack/ )\n(c) 2003 Bruno Morisson <*****@*****.**>\n\n"); while ((opt = getopt (argc, argv, "vTUb:t:i:p:s:d:")) != -1) { switch (opt) { case 's': if (s) usage (); src_s = optarg; s++; break; case 'd': if (d) usage (); victim_s = optarg; d++; break; case 'i': if (i) usage (); iface = optarg; i++; break; case 'p': if (p) usage (); plist_s = optarg; p++; break; case 'v': verbose++; break; case 't': timeout = atoi (optarg); break; default: usage (); } } if (d != 1 || p != 1) usage (); if (!(l = libnet_init (LIBNET_RAW6, iface, err_buf))) { fprintf (stderr, "error opening raw sock: %s\n", err_buf); exit (-1); } if (!iface) iface = libnet_getdevice (l); if (libnet_plist_chain_new (l, &plist, plist_s) == -1) { fprintf (stderr, "invalid portlist %s\n", libnet_geterror (l)); exit (-1); } if(s) src = libnet_name2addr6 (l, src_s, LIBNET_RESOLVE); else src = libnet_get_ipaddr6(l); if (!memcmp ((char *) &src, (char *) &in6addr_error, sizeof (in6addr_error))) { fprintf (stderr, "error in address: %s\n", libnet_geterror (l)); exit (-1); } victim = libnet_name2addr6 (l, victim_s, LIBNET_RESOLVE); if (!memcmp ((char *) &victim, (char *) &in6addr_error, sizeof (in6addr_error))) { fprintf (stderr, "error in address: %s\n", libnet_geterror (l)); exit (-1); } printf ("Using device: %s\n", iface); tcp_tag = build_pkt (l, &seq, src, victim); signal (SIGCHLD, SIG_IGN); /* We really shouldn't do this... */ if (!collect (iface, seq)) return -1; printf ("Scanning ports %s on %s\n", libnet_plist_chain_dump_string (plist), victim_s); send_tcp_pkts (l, plist, tcp_tag, seq); return 0; }