Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24000
  • 博文数量: 4
  • 博客积分: 136
  • 博客等级: 入伍新兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-26 23:59
文章分类

全部博文(4)

文章存档

2011年(4)

我的朋友
最近访客

分类: Python/Ruby

2011-02-09 14:16:50

客户端程序
  1. hwoyh@S2-E-YZ-WANGGUAN-B:~/perl> cat cli.pl
  2. #!/usr/bin/perl -w

  3. use Socket;
  4. use IO::Handle;
  5. use strict;

  6. my($bytes_out,$bytes_in) = (0,0);
  7. my $host = shift || '10.243.210.67';
  8. my $port = shift || getservbyname('echo','tcp');

  9. my $protocol = getprotobyname('tcp');
  10. $host = inet_aton($host) or die "$host: unknown host";

  11. socket(SOCK,AF_INET,SOCK_STREAM,$protocol) or die "socket() failed:$!";
  12. my $dest_addr = sockaddr_in("2007",$host);
  13. connect(SOCK,$dest_addr) or die "connect() failed: $!";
  14. print "Enter like: /home/hwoyh/perl/ngcc.pl 15820622410 0120 \n";
  15. SOCK->autoflush(1);

  16. my $msg_out = <>;
  17. print SOCK $msg_out;
  18. while(defined( my $msg_in =<SOCK>))
  19. {
  20.         print $msg_in;
  21. }

  22. print "Finished..\n";
  23. close SOCK;
  24. hwoyh@S2-E-YZ-WANGGUAN-B:~/perl>
服务程序
  1. hwoyh@S7-E-JK-SZX:/home/hwoyh> cat serv.pl
  2. #!/usr/bin/perl -w

  3. use Socket;
  4. use IO::Handle;
  5. use strict;

  6. use constant MY_ECHO_PORT => 2007;
  7. my($bytes_out,$bytes_in)=(0,0);

  8. my $port = shift || MY_ECHO_PORT;
  9. my $protocol = getprotobyname('tcp');

  10. $SIG{'INT'} = sub {
  11.         exit 0;
  12. };

  13. socket(SOCK,AF_INET,SOCK_STREAM,$protocol) or die "socket() failed:$!";
  14. setsockopt(SOCK,SOL_SOCKET,SO_REUSEADDR,1) or die "can't set SO_REUSEADDR: $!";
  15. my $my_addr = sockaddr_in($port,INADDR_ANY);
  16. bind(SOCK,$my_addr) or die "bind() failed:$!";
  17. listen(SOCK,5) or die "listen() failed:$!";

  18. warn "waiting for incoming connections on port $port...\n";

  19. while(1)
  20. {
  21.         next unless my $remote_addr = accept(SESSION,SOCK);
  22.         my ($port,$hisaddr) = sockaddr_in($remote_addr);
  23.         warn "Connection from [",inet_ntoa($hisaddr),",$port]\n";
  24.         SESSION->autoflush(1);
  25.         while(<SESSION>)
  26.         {
  27.                 $bytes_in += length($_);
  28.                 chomp;
  29.                 my $filename = $1 if(/.+\s+(\d+)\s+\d/);
  30.                 #my $output = `$_`;

  31.                 #system("/home/hwoyh/perl/ngcc.pl","15820622410","0120");

  32.                 open(FILE,"/home/hwoyh/".$filename.".log");
  33.                 while(<FILE>)
  34.                 {
  35.                         print SESSION $_;
  36.                 }
  37.                 print SESSION 'exit';
  38.                 close(FILE);
  39.         }
  40.         warn "Connection from [",inet_ntoa($hisaddr),",$port]\n";
  41.         close(SESSION);
  42. }

  43. close(SOCK);
  44. hwoyh@S7-E-JK-SZX:/home/hwoyh>

远程抓取日志程序

 

  1. hwoyh@S7-E-JK-SZX:/home/hwoyh/perl> cat ngcc.pl
  2. #!/usr/bin/perl

  3. use Expect;

  4. if(@ARGV<2)
  5. {
  6.         print __FILE__." "."\n";
  7.         exit;
  8. }
  9. sub load_param
  10. {
  11.         @list = split (/;|;|=/, shift @_);
  12. # map(s/\s*(.+)\s*/$1/,@list);

  13.         map(s/^\s+|\s+$//g,@list);
  14.         return @list;
  15. }
  16. my $usrname;
  17. #my $logfile=$servnumber.".log";

  18. my @ip;
  19. my $servnumber= shift;
  20. my $datetime = shift;
  21. my $exp = new Expect;
  22. my $timeout = 20;
  23. my $cmd = "telnet";
  24. my $region;
  25. my $path;
  26. my $password;

  27. alarm(40);
  28. $SIG{ALRM} = sub {
  29.                         print "\ntime out!\n";
  30.                         exit;
  31.                 };
  32. #print "Enter you User Name: ";

  33. #chomp($usrname=);


  34. #print "Enter your Password: ";

  35. #system("stty -echo");

  36. #chomp($passwd=);

  37. #print "\n";

  38. #system("stty echo");

  39. $SIG{ALRM} = 'IGNORE';
  40. open(FILE,"/home/hwoyh/perl/config.ini") or die "open file failed:$!";

  41. while (<FILE>)
  42. {
  43.         chomp;
  44.         next if(/^#/);

  45.         my @value = &load_param($_);
  46.         if($value[0] eq "ip")
  47.         {
  48.                 shift @value;
  49.                 @ip = @value;
  50.         }
  51.         $usrname =$value[1] if($value[0] eq "usrname");
  52.         $region = $value[1] if($value[0] eq "region");
  53.         $path = $value[1] if($value[0] eq "path");
  54.         $passwd = $value[1] if($value[0] eq "password");
  55. }
  56. print $usrname."\n";
  57. print $passwd."\n";
  58. close(FILE);

  59. #__END__

  60. print "BEGIN.......\n";
  61. #$Expect::Log_Stdout = 0;

  62. foreach $remoteip(@ip)
  63. {
  64.         chomp;
  65.         print "Searching Host IP: $remoteip...."."\n";
  66.         $exp = Expect->spawn($cmd,$remoteip) or die "Can't spawn $cmd! $!";
  67.         $exp->log_file("/home/hwoyh/".$servnumber.".log");
  68.         $exp->send($usrname."\n") if $exp->expect($timeout,-re=>'[Ll]ogin');
  69.         $exp->send($passwd."\n") if $exp->expect($timeout,-re=>'word');

  70.         if ($exp->expect($timeout,-re=>"${usrname}>"))
  71.         {
  72.                 sleep(1);
  73.                 $exp->send("zgrep ".$servnumber." ".$path."bosscsc_".$region.".log.".$datetime."*"."\n");
  74.                 print "\tDone....\n";
  75.         }
  76.         $exp->send("exit\n") if $exp->expect($timeout,-re=>"${usrname}>");
  77.         $exp->send("\n") if $exp->expect($timeout,-re=>"${usrname}>");
  78. }

  79. print "Finish";
边学边做的第一个程序,有待改进,服务程序需要用fork改进,客户端程序需要进一下优化。因为公司系统环境原因只能绕道实现
阅读(1214) | 评论(0) | 转发(0) |
0

上一篇:ORACLE常用表

下一篇:PERL备忘

给主人留下些什么吧!~~