[Javanetsim-cvs] IceScan csubtarget.h, 1.33, 1.34 icediscover.h, 1.19, 1.20 iceparams.h, 1.11, 1.12
Status: Beta
Brought to you by:
darkkey
From: QweR <qw...@us...> - 2006-12-16 14:45:00
|
Update of /cvsroot/javanetsim/IceScan In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv2210 Modified Files: csubtarget.h icediscover.h iceparams.h icescan.cc udpscan.h Log Message: Index: icescan.cc =================================================================== RCS file: /cvsroot/javanetsim/IceScan/icescan.cc,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** icescan.cc 16 Dec 2006 10:23:07 -0000 1.26 --- icescan.cc 16 Dec 2006 14:44:56 -0000 1.27 *************** *** 18,21 **** --- 18,22 ---- "\t-PR: ARP host discovery\n" "\t-PE/PT/PM: ICMP Echo/Timestamp/Mask host discovery\n" + "\t-PU: UDP Ping discovery\n" "\t-r: no reverse-dns lookups\n" "SCAN TYPES:\n" *************** *** 37,40 **** --- 38,79 ---- } + bool parse_ports(int i, int argc, char *argv[], std::vector <port_range>& ports){ + if(i+1 < argc){ + IceRegex re1("((\\d+(-\\d+)?),?)+"); + if(! re1.match(argv[i+1]) ){ + std::cout << "Invalid port range definition format." << std::endl; + print_help(argv[0]); + exit(1); + }else{ + IceRegex re("(\\d+(-\\d+)?),?"); + icestring var = "", var2 = ""; + + re.match(argv[i+1]); + re.findReset(); + //re.Consume(&input, &var, &var2) + while(re.findNext()){ + + var2 = ""; var = ""; + re.group(1,var); + if(re.groups() > 2) re.group(2,var2); + struct port_range pr; + + if(var2 == ""){ + sscanf(var.c_str(), "%d", &pr.lower_port); + pr.upper_port = pr.lower_port; + }else{ + sscanf(var.c_str(), "%d-%d", &pr.lower_port, &pr.upper_port); + } + ports.push_back(pr); + } + i++; + } + }else{ + std::cout << "Invalid port range definition format." << std::endl; + print_help(argv[0]); + exit(1); + } + } + bool parse_input(int argc, char *argv[], iceparams *par){ int c; *************** *** 187,190 **** --- 226,230 ---- case 'A': par->ack_ping_discovery = true; + parse_ports(i, argc, argv, par->pa_ports); break; *************** *** 203,208 **** --- 243,254 ---- case 'M': par->icmp_mask_ping_discovery = true; + parse_ports(i, argc, argv, par->pm_ports); break; + case 'U': + par->udp_ping_discovery = true; + parse_ports(i, argc, argv, par->pu_ports); + break; + default: std::cout << "Invalid discovery type: -P" << argv[i][2] << std::endl; *************** *** 214,256 **** case 'p': ! ! if(i+1 < argc){ ! IceRegex re1("((\\d+(-\\d+)?),?)+"); ! if(! re1.match(argv[i+1]) ){ ! std::cout << "Invalid port range definition format." << std::endl; ! print_help(argv[0]); ! exit(1); ! }else{ ! IceRegex re("(\\d+(-\\d+)?),?"); ! ! ! icestring var = "", var2 = ""; ! ! re.match(argv[i+1]); ! re.findReset(); ! //re.Consume(&input, &var, &var2) ! while(re.findNext()){ ! ! var2 = ""; var = ""; ! re.group(1,var); ! if(re.groups() > 2) re.group(2,var2); ! struct port_range pr; ! ! if(var2 == ""){ ! sscanf(var.c_str(), "%d", &pr.lower_port); ! pr.upper_port = pr.lower_port; ! }else{ ! sscanf(var.c_str(), "%d-%d", &pr.lower_port, &pr.upper_port); ! } ! par->ports.push_back(pr); ! } ! i++; ! } ! }else{ ! std::cout << "Invalid port range definition format." << std::endl; ! print_help(argv[0]); ! exit(1); ! } ! break; --- 260,264 ---- case 'p': ! parse_ports(i, argc, argv, par->ports); break; Index: csubtarget.h =================================================================== RCS file: /cvsroot/javanetsim/IceScan/csubtarget.h,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** csubtarget.h 16 Dec 2006 14:42:43 -0000 1.33 --- csubtarget.h 16 Dec 2006 14:44:56 -0000 1.34 *************** *** 10,14 **** #include "iceoutput.h" #include "iceparams.h" - #include "icediscover.h" #include "nbt_wrapper.h" #include "iceprotocol.h" --- 10,13 ---- *************** *** 27,32 **** class csubtarget; ! void udpscan(icestring, icestring, std::map <int, scanning_port>, iceparams*, iceoutput*, csubtarget*); ! struct scan_socket{ int sid; --- 26,34 ---- class csubtarget; ! //#include "udpscan.h" ! bool udpscan(icestring destname, std::map <int, scanning_port> scanning_ports, iceparams *par, iceoutput *out, csubtarget * subtarget, bool isscan); ! ! #include "icediscover.h" ! struct scan_socket{ int sid; *************** *** 148,153 **** } ! ! int udp_scan(){ // connect scan, -SU --- 150,154 ---- } ! int udp_scan(){ // connect scan, -SU *************** *** 164,172 **** out->line(output_buf); } ! ! if(gethostname(local_hostname,79)) exit(-1); ! local_hn.assign(local_hostname); ! ! udpscan(local_hn, hostname, scanning_ports, par, out, this); // udpscan2(local_hn, hostname, scanning_ports,hostname.c_str(), par, out); --- 165,170 ---- out->line(output_buf); } ! ! udpscan(hostname, scanning_ports, par, out, this, true); // udpscan2(local_hn, hostname, scanning_ports,hostname.c_str(), par, out); Index: iceparams.h =================================================================== RCS file: /cvsroot/javanetsim/IceScan/iceparams.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** iceparams.h 16 Dec 2006 00:29:16 -0000 1.11 --- iceparams.h 16 Dec 2006 14:44:56 -0000 1.12 *************** *** 39,49 **** bool ack_ping_discovery; // -PA, ACK Ping ! std::vector <int> pa_ports; bool syn_ping_discovery; // -PS, SYN Ping ! std::vector <int> ps_ports; bool arp_discovery; // -PM, ARP Ping ! std::vector <int> pm_ports; bool icmp_echo_ping_discovery; // -PE, ICMP Echo (standart) Ping --- 39,49 ---- bool ack_ping_discovery; // -PA, ACK Ping ! std::vector <port_range> pa_ports; bool syn_ping_discovery; // -PS, SYN Ping ! std::vector <port_range> ps_ports; bool arp_discovery; // -PM, ARP Ping ! std::vector <port_range> pm_ports; bool icmp_echo_ping_discovery; // -PE, ICMP Echo (standart) Ping *************** *** 52,56 **** bool udp_ping_discovery; // -PU, UDP send + ICMP reply Ping ! std::vector <int> pu_ports; // Scan Options ( default: -ST ) --- 52,56 ---- bool udp_ping_discovery; // -PU, UDP send + ICMP reply Ping ! std::vector <port_range> pu_ports; // Scan Options ( default: -ST ) Index: icediscover.h =================================================================== RCS file: /cvsroot/javanetsim/IceScan/icediscover.h,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** icediscover.h 16 Dec 2006 10:23:07 -0000 1.19 --- icediscover.h 16 Dec 2006 14:44:56 -0000 1.20 *************** *** 164,168 **** bool udp_discovery(const char *hostname, iceparams *par, iceoutput *out){ ! return false; } --- 164,183 ---- bool udp_discovery(const char *hostname, iceparams *par, iceoutput *out){ ! std::map <int, scanning_port> scanning_ports; ! ! for(int j = 0; j < par->pu_ports.size(); j++){ ! port_range pr = par->pu_ports[j]; ! ! for(int i = pr.lower_port; i <= pr.upper_port; i++){ ! if(scanning_ports.find(i) == scanning_ports.end()){ ! struct scanning_port sp; ! sp.port_number = i; ! scanning_ports[i] = sp; ! scanning_ports[i].attempt = 0; ! scanning_ports[i].done = false; ! } ! } ! } ! return udpscan(hostname,scanning_ports,par,out,NULL,false); } *************** *** 181,184 **** --- 196,200 ---- if(par->arp_discovery) if( arp_discovery(hostname, par, out) ) return true; + // if(par->udp_ping_discovery) if( udp_discovery(hostname, par, out) ) return true; if(par->verbose>0) *out << "Host discovery failed!" << iceoutput::endl; Index: udpscan.h =================================================================== RCS file: /cvsroot/javanetsim/IceScan/udpscan.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** udpscan.h 16 Dec 2006 12:37:31 -0000 1.7 --- udpscan.h 16 Dec 2006 14:44:56 -0000 1.8 *************** *** 19,29 **** 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; --- 19,22 ---- *************** *** 39,43 **** port = ntohs(udp->dest); ! if(par->verbose>0) out->line("Recieved icmp port unreachable."); return port; --- 32,36 ---- port = ntohs(udp->dest); ! if(par->verbose>2) *out << "Recieved icmp port " << port << "unreachable."; return port; *************** *** 50,55 **** } ! void udpscan(icestring hostname, icestring destname, std::map <int, scanning_port> scanning_ports, iceparams *par, iceoutput *out, csubtarget* subtarget){ ! #ifndef __CYGWIN__ if(!getuid() || par->forceuid){ --- 43,56 ---- } ! /* UDP Ping scanning/discovery function ! * destname - destination hostname ! * scaiing_ports - ports for scanning/discovery ! * par - scanning/discovery parameters ! * out - output stream ! * subtarget - target for this scan/discovery ! * isscan - 'true' for scanning, 'false' for discovery ! */ ! bool udpscan(icestring destname, std::map <int, scanning_port> scanning_ports, iceparams *par, iceoutput *out, csubtarget * subtarget, bool isscan){ ! bool result = isscan; #ifndef __CYGWIN__ if(!getuid() || par->forceuid){ *************** *** 61,65 **** #define UDP_SCAN_REPEATS 5 int repeats; - int rep2; csocket sudp(PF_INET, SOCK_DGRAM); crawsocket sicmp(AF_INET, SOCK_RAW, IPPROTO_ICMP); --- 62,65 ---- *************** *** 68,77 **** memset(zmsg, 0, UDP_SCAN_ZSIZE); int recvbytes; - bool p; int port; int recvsize = UDP_SCAN_RECVSIZE; ! sudp.bind(hostname.c_str(), 0, 0); sudp.nonblock(true); sicmp.nonblock(true); --- 68,79 ---- memset(zmsg, 0, UDP_SCAN_ZSIZE); int recvbytes; int port; + char hostname[80]; int recvsize = UDP_SCAN_RECVSIZE; ! if(gethostname(hostname,79)) exit(-1); ! ! sudp.bind(hostname, 0, 0); sudp.nonblock(true); sicmp.nonblock(true); *************** *** 80,99 **** sicmp.setsockopt(SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)); ! for(repeats = 1; repeats <= UDP_SCAN_REPEATS; repeats++){ ! for(std::map <int, scanning_port>::iterator i = scanning_ports.begin(); i!= scanning_ports.end(); ++i){ if(! (*i).second.done ){ sudp.sendto(destname.c_str(), (*i).first, zmsg, UDP_SCAN_ZSIZE, 0); iceusleep(50000*repeats); } do{ recvbytes = sudp.recvfrom(recvmsg, UDP_SCAN_RECVSIZE, 0, NULL, NULL); ! 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; ! subtarget->set_port_status(port, PORT_OPEN, "udp"); } } --- 82,106 ---- sicmp.setsockopt(SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)); ! for(repeats = 1; repeats <= UDP_SCAN_REPEATS && !(result ^ isscan); repeats++){ //exit if( isscan = false && result = true ) ! for(std::map <int, scanning_port>::iterator i = scanning_ports.begin(); i!= scanning_ports.end() && !(result ^ isscan); ++i){ if(! (*i).second.done ){ sudp.sendto(destname.c_str(), (*i).first, zmsg, UDP_SCAN_ZSIZE, 0); iceusleep(50000*repeats); + DBGOUTPUT((*i).first); } do{ recvbytes = sudp.recvfrom(recvmsg, UDP_SCAN_RECVSIZE, 0, NULL, NULL); ! if(recvbytes > 0){ struct udphdr* udp = (struct udphdr*) recvmsg; port = ntohs(udp->source); if(port!=0 && !scanning_ports[port].done && scanning_ports.find(port) != scanning_ports.end()){ ! if(isscan){ ! scanning_ports[port].done = true; ! subtarget->set_port_status(port, PORT_OPEN, "udp"); ! } ! else{ ! result = true; ! } } } *************** *** 104,134 **** // iceusleep(100000); // } ! recvbytes = sicmp.recvfrom(recvmsg, UDP_SCAN_RECVSIZE, 0, NULL); if(recvbytes > 0){ port = parse_icmp_udp_packet(recvmsg, recvbytes, par, out); if(port!=0 && !scanning_ports[port].done && !(scanning_ports.find(port) == scanning_ports.end())){ ! scanning_ports[port].done = true; ! subtarget->set_port_status(port, PORT_CLOSED, "udp"); } - p = true; } - // if(!p) rep2++; } iceusleep(50000*repeats); ! }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; ! subtarget->set_port_status(port, PORT_OPEN_FILTERED, "udp"); } } ! }else out->line("UID isn't 0, so can't create raw socket => no UDP scan..."); ! } - #endif /* _udpscan_H */ --- 111,149 ---- // iceusleep(100000); // } ! recvbytes = sicmp.recvfrom(recvmsg, UDP_SCAN_RECVSIZE, 0, NULL); if(recvbytes > 0){ port = parse_icmp_udp_packet(recvmsg, recvbytes, par, out); if(port!=0 && !scanning_ports[port].done && !(scanning_ports.find(port) == scanning_ports.end())){ ! if(isscan){ ! scanning_ports[port].done = true; ! subtarget->set_port_status(port, PORT_CLOSED, "udp"); ! } ! else{ ! result = true; ! } } } } iceusleep(50000*repeats); ! }while(recvbytes > 0 && !(result ^ isscan)); } } ! if(isscan){ ! 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; ! subtarget->set_port_status(port, PORT_OPEN_FILTERED, "udp"); ! } } } ! } ! else{ ! out->line("UID isn't 0, so can't create raw socket => no UDP scan..."); ! result = false; ! } ! return result; } #endif /* _udpscan_H */ |