[Javanetsim-cvs] IceScan csubtarget.h, 1.26, 1.27 icediscover.h, 1.16, 1.17 udpscan.h, 1.1, 1.2
Status: Beta
Brought to you by:
darkkey
From: QweR <qw...@us...> - 2006-12-16 03:24:19
|
Update of /cvsroot/javanetsim/IceScan In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv1857 Modified Files: csubtarget.h icediscover.h udpscan.h Log Message: Index: csubtarget.h =================================================================== RCS file: /cvsroot/javanetsim/IceScan/csubtarget.h,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** csubtarget.h 16 Dec 2006 00:29:15 -0000 1.26 --- csubtarget.h 16 Dec 2006 03:24:16 -0000 1.27 *************** *** 244,248 **** if(scanning_ports.find(closed_port) != scanning_ports.end()){ if(!scanning_ports[closed_port].done){ ! set_port_status(closed_port, PORT_CLOSED); scanning_ports[closed_port].done = true; } --- 244,248 ---- if(scanning_ports.find(closed_port) != scanning_ports.end()){ if(!scanning_ports[closed_port].done){ ! set_port_status(closed_port, PORT_CLOSED, "tcp"); scanning_ports[closed_port].done = true; } *************** *** 255,261 **** scanning_ports[port].done = true; if(tcp->th_win == 0){ ! set_port_status(port, PORT_CLOSED); }else{ ! set_port_status(port, PORT_OPEN); } } --- 255,261 ---- scanning_ports[port].done = true; if(tcp->th_win == 0){ ! set_port_status(port, PORT_CLOSED, "tcp"); }else{ ! set_port_status(port, PORT_OPEN, "tcp"); } } *************** *** 267,271 **** if(scanning_ports.find(port) != scanning_ports.end()){ if(!scanning_ports[port].done){ ! set_port_status(port, PORT_UNFILTERED); scanning_ports[port].done = true; } --- 267,271 ---- if(scanning_ports.find(port) != scanning_ports.end()){ if(!scanning_ports[port].done){ ! set_port_status(port, PORT_UNFILTERED, "tcp"); scanning_ports[port].done = true; } *************** *** 279,283 **** if(!scanning_ports[port].done){ scanning_ports[port].done = true; ! set_port_status(port, PORT_CLOSED); } } --- 279,283 ---- if(!scanning_ports[port].done){ scanning_ports[port].done = true; ! set_port_status(port, PORT_CLOSED, "tcp"); } } *************** *** 290,294 **** if(scanning_ports.find(port) != scanning_ports.end()){ if(!scanning_ports[port].done){ ! set_port_status(port, PORT_OPEN); rawsend.send_tcp_raw(source, hostname, MAGIC_PORT, port, 0, 0, TH_RST, 0, 0, 0); scanning_ports[port].done = true; --- 290,294 ---- if(scanning_ports.find(port) != scanning_ports.end()){ if(!scanning_ports[port].done){ ! set_port_status(port, PORT_OPEN, "tcp"); rawsend.send_tcp_raw(source, hostname, MAGIC_PORT, port, 0, 0, TH_RST, 0, 0, 0); scanning_ports[port].done = true; *************** *** 309,313 **** if(! (*i).second.done){ (*i).second.done = true; ! set_port_status((*i).first, get_no_response_status()); } } --- 309,313 ---- if(! (*i).second.done){ (*i).second.done = true; ! set_port_status((*i).first, get_no_response_status(), "tcp"); } } *************** *** 339,343 **** local_hn.assign(local_hostname); ! udpscan(local_hn, hostname, scanning_ports, par, out); // udpscan2(local_hn, hostname, scanning_ports,hostname.c_str(), par, out); --- 339,343 ---- local_hn.assign(local_hostname); ! udpscan(local_hn, hostname, scanning_ports); // udpscan2(local_hn, hostname, scanning_ports,hostname.c_str(), par, out); *************** *** 381,384 **** --- 381,485 ---- scanning_ports.clear(); } + + void udpscan(icestring hostname, icestring destname, std::map <int, scanning_port> scanning_ports){ + //char recvpackettest[56] = {0x45,0x00,0x00,0x38,0x36,0xd8,0x00,0x00,0xf2,0x01,0x0b,0x5e,0x52,0x8c,0x67,0x12, + // 0x57,0xed,0x75,0x03,0x03,0x03,0x83,0xa5,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x1c, + // 0x43,0x23,0x00,0x00,0x73,0x11,0x7e,0x1f,0x57,0xed,0x75,0x03,0x52,0x8c,0x67,0x12, + // 0x1a,0xf6,0x01,0xBC,0x00,0x08,0x5c,0xc9}; + //char recvpackettest2[8] = {0x01,0xBD,0x1a,0xf6,0x00,0x08,0x5c,0xc9}; + //bool alreadyscan = false; + //bool alreadyscan2 = false; + + #ifndef __CYGWIN__ + if(!getuid() || par->forceuid){ + #else + if(par->forceuid){ + #endif + #define UDP_SCAN_ZSIZE 0 + #define UDP_SCAN_RECVSIZE 150 + #define UDP_SCAN_REPEATS 5 + int repeats; + int rep2; + csocket sudp(PF_INET, SOCK_DGRAM); + crawsocket sicmp(AF_INET, SOCK_RAW, IPPROTO_ICMP); + char zmsg[UDP_SCAN_ZSIZE]; + char recvmsg[UDP_SCAN_RECVSIZE]; + memset(zmsg, 0, UDP_SCAN_ZSIZE); + int recvbytes; + bool p; + int port; + + int recvsize = UDP_SCAN_RECVSIZE; + + sudp.bind(hostname.c_str(), sudp.getMagicPort(), 0); + sudp.nonblock(true); + sicmp.nonblock(true); + sicmp.setsockopt(SOL_SOCKET, SO_RCVBUF, &recvsize, sizeof(recvsize)); + // sicmp.setsockopt(SOL_SOCKET, SO_RCVBUF, &recvsize, sizeof(recvsize)); + for(repeats = 0; repeats < UDP_SCAN_REPEATS; repeats++){ + // DBGOUTPUT("STARTING..."); + for(std::map <int, scanning_port>::iterator i = scanning_ports.begin(); i!= scanning_ports.end(); ++i){ + if(! (*i).second.done ){ + // DBGOUTPUT((*i).first); + sudp.sendto(destname.c_str(), (*i).first, zmsg, UDP_SCAN_ZSIZE, 0); + iceusleep(100000); + } + // alreadyscan = false; + // alreadyscan2 = false; + do{ + recvbytes = sudp.recvfrom(recvmsg, UDP_SCAN_RECVSIZE, 0, NULL, NULL); + // if((*i).first == 445 && !alreadyscan2){ + // recvbytes = 8; + // memcpy(recvmsg, recvpackettest2, 8); + // alreadyscan2 = true; + // } + p = recvbytes > 0; + if(p){ + struct udphdr* udp = (struct udphdr*) recvmsg; + port = ntohs(udp->source); + if(port!=0 && !scanning_ports[port].done && scanning_ports.find(port) != scanning_ports.end()){ + scanning_ports[port].done = true; + set_port_status(port, PORT_OPEN, "udp"); + } + } + else{ + recvbytes = sicmp.recvfrom(recvmsg, UDP_SCAN_RECVSIZE, 0, NULL); + + // if((*i).first == 444 && !alreadyscan){ + // recvbytes = 56; + // memcpy(recvmsg, recvpackettest, 56); + // alreadyscan = true; + // } + + // recvbytes = recvfrom(sicmp.get_socketid(), recvmsg, RECVSIZE, 0, NULL, NULL); + if(recvbytes > 0){ + port = parse_icmp_udp_packet(recvmsg, recvbytes, par, out); + // DBGOUTPUT(port); + if(port!=0 && !scanning_ports[port].done && scanning_ports.find(port) != scanning_ports.end()){ + scanning_ports[port].done = true; + set_port_status(port, PORT_CLOSED, "udp"); + } + p = true; + } + else if(recvbytes != -1){ + // DBGOUTPUT("NO DATA..."); + // DBGOUTPUT(recvbytes); + } + if(!p) rep2++; + } + iceusleep(100000); + }while(recvbytes > 0); + } + } + for(std::map <int, scanning_port>::iterator i = scanning_ports.begin(); i!= scanning_ports.end(); ++i){ + if(! (*i).second.done ){ + port = (*i).first; + scanning_ports[port].done = true; + set_port_status(port, PORT_OPEN_FILTERED, "udp"); + } + } + }else out->line("UID isn't 0, so can't create raw socket => no UDP scan..."); + + } private: *************** *** 561,581 **** } ! void print_port_status(int port, enum port_status ps){ char output_buf[255]; if(ps == PORT_OPEN && par->verbose >= 1){ ! sprintf(output_buf, "Discovered open port %d/tcp on %s.", port, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_CLOSED && par->verbose > 1){ ! sprintf(output_buf, "Discovered closed port %d/tcp on %s.", port, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_FILTERED && par->verbose > 2){ ! sprintf(output_buf, "Discovered filtered port %d/tcp on %s.", port, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_OPEN_FILTERED && par->verbose > 2){ ! sprintf(output_buf, "Discovered open|filtered port %d/tcp on %s.", port, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_UNFILTERED && par->verbose > 1){ ! sprintf(output_buf, "Discovered unfiltered port %d/tcp on %s.", port, hostname.c_str()); out->line(output_buf); } --- 662,682 ---- } ! void print_port_status(int port, enum port_status ps, char* protocol){ char output_buf[255]; if(ps == PORT_OPEN && par->verbose >= 1){ ! sprintf(output_buf, "Discovered open port %d/%s on %s.", port, protocol, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_CLOSED && par->verbose > 1){ ! sprintf(output_buf, "Discovered closed port %d/%s on %s.", port, protocol, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_FILTERED && par->verbose > 2){ ! sprintf(output_buf, "Discovered filtered port %d/%s on %s.", port, protocol, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_OPEN_FILTERED && par->verbose > 2){ ! sprintf(output_buf, "Discovered open|filtered port %d/%s on %s.", port, protocol, hostname.c_str()); out->line(output_buf); }else if(ps == PORT_UNFILTERED && par->verbose > 1){ ! sprintf(output_buf, "Discovered unfiltered port %d/%s on %s.", port, protocol, hostname.c_str()); out->line(output_buf); } *************** *** 674,678 **** ! set_port_status((*i).first, status); (*i).second.done = true; shutdown_scansocket((*i).second.socket_ptr); --- 775,779 ---- ! set_port_status((*i).first, status, "tcp"); (*i).second.done = true; shutdown_scansocket((*i).second.socket_ptr); *************** *** 683,687 **** status = PORT_FILTERED; ! set_port_status((*i).first, status); (*i).second.done = true; shutdown_scansocket((*i).second.socket_ptr); --- 784,788 ---- status = PORT_FILTERED; ! set_port_status((*i).first, status, "tcp"); (*i).second.done = true; shutdown_scansocket((*i).second.socket_ptr); *************** *** 696,705 **** } ! void set_port_status(int port, enum port_status status){ struct scanned_port sp; sp.port_number = port; sp.status = status; subtarget_ports.push_back(sp); ! print_port_status(sp.port_number, status); } --- 797,806 ---- } ! void set_port_status(int port, enum port_status status, char* protocol){ struct scanned_port sp; sp.port_number = port; sp.status = status; subtarget_ports.push_back(sp); ! print_port_status(sp.port_number, status, protocol); } Index: icediscover.h =================================================================== RCS file: /cvsroot/javanetsim/IceScan/icediscover.h,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** icediscover.h 16 Dec 2006 00:29:16 -0000 1.16 --- icediscover.h 16 Dec 2006 03:24:16 -0000 1.17 *************** *** 158,161 **** --- 158,165 ---- } + bool udp_discovery(const char *hostname, iceparams *par, iceoutput *out){ + return false; + } + bool host_discover(const char *hostname, iceparams *par, iceoutput *out){ Index: udpscan.h =================================================================== RCS file: /cvsroot/javanetsim/IceScan/udpscan.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** udpscan.h 16 Dec 2006 00:29:16 -0000 1.1 --- udpscan.h 16 Dec 2006 03:24:16 -0000 1.2 *************** *** 12,108 **** #include "icesockets/sock_types.h" #include "icesockets/sock_err.h" - #define ZSIZE 0 - #define RECVSIZE 150 - char recvpackettest[70] = {0x00,0x11,0xd8,0x5e,0xea,0x44,0x00,0x17,0x95,0xee,0x26,0x1a,0x08,0x00,0x45,0x00, - 0x00,0x38,0x36,0xd8,0x00,0x00,0xf2,0x01,0x0b,0x5e,0x52,0x8c,0x67,0x12,0x57,0xed, - 0x75,0x03,0x03,0x03,0x83,0xa5,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x1c,0x43,0x23, - 0x00,0x00,0x73,0x11,0x7e,0x1f,0x57,0xed,0x75,0x03,0x52,0x8c,0x67,0x12,0x1a,0xf6, - 0x01,0x90,0x00,0x08,0x5c,0xc9}; ! void udpscan(icestring hostname, icestring destname, std::map <int, scanning_port> scanning_ports, iceparams *par, iceoutput *out){ ! #ifndef __CYGWIN__ ! if(!getuid() || par->forceuid){ ! #else ! if(par->forceuid){ ! #endif ! int repeats; ! int rep2; ! csocket sudp(PF_INET, SOCK_DGRAM); ! crawsocket sicmp(AF_INET, SOCK_RAW, IPPROTO_ICMP); ! char zmsg[ZSIZE]; ! char recvmsg[RECVSIZE]; ! memset(zmsg, 0, ZSIZE); ! int recvbytes; ! struct icmp* icmppacket; ! // struct ip *ip ! bool p; ! int recvsize = RECVSIZE; ! sudp.bind(hostname.c_str(), sudp.getMagicPort(), 0); ! sudp.nonblock(true); ! sicmp.nonblock(true); ! sicmp.setsockopt(SOL_SOCKET, SO_RCVBUF, &recvsize, sizeof(recvsize)); ! // sicmp.setsockopt(SOL_SOCKET, SO_RCVBUF, &recvsize, sizeof(recvsize)); ! for(repeats = 0; repeats < 10; repeats++){ ! DBGOUTPUT("STARTING..."); ! for(std::map <int, scanning_port>::iterator i = scanning_ports.begin(); i!= scanning_ports.end(); ++i){ ! if(! (*i).second.done ){ ! DBGOUTPUT((*i).first); ! sudp.sendto(destname.c_str(), (*i).first, zmsg, ZSIZE, 0); ! iceusleep(10000); ! } ! } ! for(rep2 = 0; rep2 < 10; ){ ! recvbytes = sudp.recvfrom(recvmsg, RECVSIZE, 0, NULL, NULL); ! p = recvbytes > 0; ! recvbytes = sicmp.recvfrom(recvmsg, RECVSIZE, 0, NULL); ! // recvbytes = recvfrom(sicmp.get_socketid(), recvmsg, RECVSIZE, 0, NULL, NULL); ! if(recvbytes > 0){ ! DBGOUTPUT("Data portion:\n"); ! for(int i=0; i < recvbytes; i++) printf("%2X%c", recvmsg[i], (++i%16)? ' ' : '\n'); ! printf("\n"); ! ! // ip = (struct ip *) buf; ! // int hdrlen = ip->ip_hl << 2; ! // icmppacket = (struct icmp *) (buf + hdrlen); ! // int icmplen = len - hdrlen; ! // ! // bool result = false; ! // ! // if(icmp->icmp_type == ICMP_UNREACH && icmp->icmp_code == ICMP_UNREACH_PORT){ ! // result = true; ! // if(par->verbose>0) ! // out->line("Recieved icmp port unreachable."); ! // ! // char *buf; ! // ! // uint32_t t = ntohl(icmp->icmp_rtime); ! // ! // DBGOUTPUT(t); ! // ! // DBGOUTPUT(make_uptime(t)); ! // } ! // if(result){ ! // free(t_hostname); ! // r.shutdown(); ! // r.close(); ! // return true; ! // } ! ! ! p = true; ! } ! else if(recvbytes != -1){ ! DBGOUTPUT("NO DATA..."); ! DBGOUTPUT(recvbytes); ! } ! iceusleep(10000); ! if(!p) rep2++; ! } } ! }else out->line("UID isn't 0, so can't create raw socket => no ICMP ping..."); ! } --- 12,53 ---- #include "icesockets/sock_types.h" #include "icesockets/sock_err.h" ! #define UDP_SCAN_ZSIZE 0 ! #define UDP_SCAN_RECVSIZE 150 ! #define UDP_SCAN_REPEATS 5 ! int parse_icmp_udp_packet(char* recvmsg, int recvbytes, iceparams *par, iceoutput *out){ ! int port = 0; ! // DBGOUTPUT("Data portion:\n"); ! // for(int i=0; i < recvbytes; i++){ ! // char a = recvmsg[i]; ! // printf("%02X%c", a & 0xFF, (++i%16)? ' ' : '\n'); ! // } ! // printf("\n"); ! ! struct ip* ip = (struct ip*) recvmsg; ! int hdrlen = ip->ip_hl << 2; ! struct icmp* icmppacket = (struct icmp *) (recvmsg + hdrlen); ! int icmplen = recvbytes - hdrlen; ! ! if(icmppacket->icmp_type == ICMP_UNREACH && icmppacket->icmp_code == ICMP_UNREACH_PORT){ ! ! ip = (struct ip*) (&icmppacket->icmp_ip); ! hdrlen = ip->ip_hl << 2; ! if(ip->ip_p == SOL_UDP && ((char*)ip+hdrlen+sizeof(udphdr))-recvmsg<=recvbytes){ ! struct udphdr* udp = (struct udphdr *) ((char*)ip + hdrlen); ! port = ntohs(udp->dest); ! ! if(par->verbose>0) out->line("Recieved icmp port unreachable."); ! ! return port; } ! else{ ! DBGOUTPUT("incorrect length of packet"); ! } ! } ! return 0; } *************** *** 150,159 **** // r.send_icmp_packet(hostname, msg_type, 0, getpid(), at, 0, buf, sizeof(struct timeval)); ! char zmsg[ZSIZE]; for(std::map <int, scanning_port>::iterator i = scanning_ports.begin(); i!= scanning_ports.end(); ++i){ if(! (*i).second.done ){ DBGOUTPUT((*i).first); ! sudp.sendto(destname2.c_str(), (*i).first, zmsg, ZSIZE, 0); iceusleep(10000); } --- 95,104 ---- // r.send_icmp_packet(hostname, msg_type, 0, getpid(), at, 0, buf, sizeof(struct timeval)); ! char zmsg[UDP_SCAN_ZSIZE]; for(std::map <int, scanning_port>::iterator i = scanning_ports.begin(); i!= scanning_ports.end(); ++i){ if(! (*i).second.done ){ DBGOUTPUT((*i).first); ! sudp.sendto(destname2.c_str(), (*i).first, zmsg, UDP_SCAN_ZSIZE, 0); iceusleep(10000); } |