http://www.perlmonks.org?node_id=1015129

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

someone one can help me finished it,i dont know use thread to this scripts.above is the scripts i have a lot of domain and need to scan domain that services port which had opend now use nmap to scan domain save in mssql2005,has a table "psinfo" it has two row ,one is "domainname",another is "psinfo" ex: domainname port www.google.com 80 www.yahoo.com 80 www.facebook.com 80,443

#!/usr/bin/perl use strict; use warnings; use DBI; my $dsn = 'DBI:Sybase:server=sql1'; my $dbh = DBI->connect($dsn, "test", 'test123'); die "unable to connect to server $DBI::errstr" unless $dbh; $dbh->do("use portscan"); my $query = "SELECT domainname FROM psinfo"; my $sth = $dbh->prepare ($query) or die "prepare failed\n"; $sth->execute() or die "unable to execute query $query error $DBI::e +rrstr"; $sth->finish; #my $rows = $sth->rows ; #print "$row rows returned by query\n"; my $line; my @list; my $myport; while ($line = $sth->fetchrow_array()) { my @list =`nmap $line`; foreach(@list){ if($_=~/open/g){ $_ =~ s/\/.*//g; if($myport){$myport=$myport.','.$_;chomp $myport;} else{$myport=$_; chomp $myport} } } print "$myport\n"; #for test $sth = $dbh->prepare("update psinfo set port=\'$myport\' where domainn +ame=\'$line\'"); $sth->execute() or die "unable to execute update line where name is $l +ine! error $DBI::errstr"; $sth->finish; }
  • Comment on how to write thread which was multithreaded port scan scripts for nmap
  • Download Code

Replies are listed 'Best First'.
Re: how to write thread which was multithreaded port scan scripts for nmap
by vinoth.ree (Monsignor) on Jan 24, 2013 at 11:52 UTC

    I am not sure, I understand your requirement clearly!

    What I guess is,you have many domain names in psinfo table and want to scan those domain names with nmap command and you are currently scanning through each domain one by one with while loop. Now you want to start thread process for each domain name to scan with nmap and update back to the psinfo table ?

    Please confirm is this your requirement? So that we can help you better!

      thanks your reply yes,you are right

        Ok,fine. Then include the threads module into your code as

        use threads;

        within the while loop,create new thread for each domain name.

        while ($line = $sth->fetchrow_array()) { #Your code goes here my $new_thread = threads->new(\&scan_domain, $line);</b> } sub scan_domain { my $domain_name = shift; print "started thread for $domain_name\n"; my @list =`nmap $line`; foreach(@list){ if($_=~/open/g){ $_ =~ s/\/.*//g; if($myport) {$myport=$myport.','.$_;chomp $myport;} else{$myport=$_; chomp $myport} }

        Even you can return the $myport from the subroutine and update the table outside the subroutine or even you can have that table updating script inside the subroutine, its your wish.

        If you want these threads to run as daemon process do not return from the subroutine use infinite loop to process in a frequent time.

        Update:

        Included threads cpan link