Add a host, delete a host, add a user, delete a user, ping a host, list processes, list filesystems, lists hosts, and kill a process. : Socket « Network « Perl

Perl
1. Array
2. CGI
3. Class
4. Data Type
5. Database
6. File
7. GUI
8. Hash
9. Language Basics
10. Network
11. Regular Expression
12. Report
13. Statement
14. String
15. Subroutine
16. System Functions
17. Win32
18. XML
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Perl » Network » Socket 
Add a host, delete a host, add a user, delete a user, ping a host, list processes, list filesystems, lists hosts, and kill a process.
    

To add or delete hosts and users, ptadmin.pl must be ran as root. Normal user may only kill their own processes.

#! /usr/bin/perl
use Tk;

# anderson.stephen@gmail.com
# Copyright (C2006 Stephen W. Anderson
#
#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
#as published by the Free Software Foundation; either version 2
#of the License, or (at your optionany later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

02/18/01 - Birth of ptadmin. 
# Updated for Ubuntu 01/07/05
# Fixed Add User - will now create home directory, add encrypted password
# Process listing will no longer list the ps -ef command used to get the processes
# Widened the GUI so all buttons are readable
# Fixed the order of the added host entries (e.g. IP, fqdn, hostname, alias)
#
   $computer =`hostname`;
   $seconds_time = time();
   $time = localtime($seconds_time);
   chomp($computer);
   chomp($time);
   my $mw = MainWindow->new;
   $mw->geometry("710x375+0+0");
   $mw->title("$computer - $time");
   $mw->iconname("ptadmin");
   $mw->iconmask();
   $mw->iconmask("info");
   $mw->client();
   $mw->client("ptadmin");

#----------------- Main Window
   my $f = $mw->Frame(-highlightbackground => 'blue',
      -highlightthickness => 4)->pack(-side => 'top');
   $lb = $f->Scrolled("Listbox", -selectmode => "single", -width => "100", -height => "5",
            -scrollbars => 'osoe');

   @dfk = `df -k`;
   $how_many = scalar @dfk;
   for ($count=0;$count<$how_many;$count++){
       chomp($dfk[$count]);
       }

   $lb->insert('end', @dfk);
   $lb->bind('<Button-1>', sub 
            my $selected = $lb->get($lb->curselection());
            });

   foreach $part_disk (@dfk){
           @part_use = split (/\s+/, $part_disk);
           $part_use[4=~ s/%//;
        #Change this number to the percentage that you desire
        $part_limit = 95;
           if (($part_use[4> $part_limit&& ($part_use[4cmp 'Use')) {
                $lb->insert('end', "Warning! $part_use[0] Usage Percentage exceeds $part_limit");
            }
           else {
           #do nothing
                
            }
   $lb->pack(-side => 'top', -fill => 'both', -expand => 1);
   @proc = `ps -ef|grep -v "ps -ef"`;
   $how_many = scalar @proc;
   for ($count=0;$count<$how_many;$count++){
       chomp($proc[$count]);
       }
   $lb4 = $f->Scrolled("Listbox", -selectmode => "single",
                        -height => "5",-width => "100",
                        -scrollbars => 'osoe')->pack(-side=>'bottom', 
                        -fill => 'both', -expand => 1);
   $lb4->insert('end',@proc);
   $lb4->bind('<Button-1>', sub 
              my $selected4 = $lb4->get($lb4->curselection());
              });
   @hosts = `cat /etc/hosts`;
   $how_many = scalar @hosts;
   for ($count=0;$count<$how_many;$count++){
       chomp($hosts[$count]);
       $hosts[$count=~ s/\t/ /g;
       }

   $lb2 = $f->Scrolled("Listbox", -selectmode => "single",
                        -height=> "5", -width => "60",
                        -scrollbars => 'osoe')->pack(-side=>'right', 
                        -fill => 'both', -expand => 1);
   $lb2->insert('end',@hosts);
   $lb2->bind('<Button-1>', sub {
             my $selected1 = $lb2->get($lb2->curselection());
             });

   @users = `cat /etc/passwd | awk -F : '{i(\$3 > 99print \$1"  "  \$3"  " \$4"  " \$5}'`;
   $how_many = scalar @users;

   for ($count=0;$count<$how_many;$count++){
       chomp($users[$count]);
       }

   $lb3 = $f->Scrolled("Listbox", -selectmode => "single",
                        -height=> "5", -width => "40",
                        -scrollbars => 'osoe')->pack(-side=>'left',
                        -fill => 'both', -expand => 1);
   $lb3->insert('end',@users);
   $lb3->bind('<Button-1>', sub 
              my $selected3 = $lb3->get($lb3->curselection());
             });

   my $g = $mw->Frame(-highlightbackground => 'blue',
      -highlightthickness => 4);
   my $but = $g->Button(-text => "Exit",
             -command => sub exit } )->pack(-side => "right",
             -fill => "x");

   my $but1 = $g->Button(-text => "Ping",
              -command => \&ping)->pack(-side => "right",
              -fill => "x");

   my $but2 = $g->Button(-text => "Kill Process",
              -command => \&kill_proc)->pack(-side => "right",
              -fill => "x");

   my $but3 = $g->Button(-text => "Refresh",
              -command => \&StatsClear)->pack(-side => "right",
              -fill => "x");

   my $but5 = $g->Button(-text => "Hosts",
              -command => \&HostClear)->pack(-side => "right",
              -fill => "x");

   my $but4 = $g->Button(-text => "Add Host",
              -command => \&add_host)->pack(-side => "right",
              -fill => "x");

   my $but6 = $g->Button(-text => "Delete Host",
              -command => \&DelHost)->pack(-side => "right",
              -fill => "x");

   my $but8 = $g->Button(-text => "Add User",
              -command => \&UserAdd)->pack(-side => "right",
              -fill => "x");

   my $but7 = $g->Button(-text => "Delete User",
              -command => \&UserDel)->pack(-side => "right",
              -fill => "x");

   $f->pack(-side => 'top', -fill => 'x');
   $g->pack(-side => 'top', -fill => 'x');

   MainLoop;

   sub ping {
            if (!$lb2->selectionIncludes('active')){
         print "Select a host to Ping!";
            }
           else{
               my $selected1 = $lb2->get($lb2->curselection());
               @ip = split (/ /, $selected1);
               chomp ($ip[0]);
               if (!`ping -c $ip[0]`) { 
               $lb2->delete(0'end');
               $lb2->insert('end',"IP appears to be invalid!");
                   }
            else {
                     `ping -c 3 $ip[0]>ptping.txt`;
                     @ping_results = `cat ptping.txt`;
                     $how_many = scalar @ping_results;
                     for ($count=0;$count<$how_many;$count++){
                         chomp($ping_results[$count]);
                         }
                     $lb2->delete(0, 'end');
                     $lb2->insert('end',@ping_results);
              }
               }
   }

   sub kill_proc {
                 if (!$lb4->selectionIncludes('active')){
              print "Select a process to kill!";
                 }
                 else{
                     my $selected4 = $lb4->get($lb4->curselection());
                     @proc = split (/\s+/,$selected4);
                     `kill -9 $proc[1]`;
                     $lb4->delete(0, 'end');
                     @proc = `ps -ef`;
                     $how_many = scalar @proc;
                     for ($count=0;$count<$how_many;$count++){
                         chomp($proc[$count]);
                         }
                    $lb4->insert('end',@proc);
                 }
   }  

   sub disk {
          $lb->delete(0, 'end');
          @dfk = `df -k`;
          $how_many = scalar @dfk;
          for ($count=0;$count<$how_many;$count++){
              chomp($dfk[$count]);
              }
          $lb->insert('end', @dfk);
          foreach $part_disk (@dfk){
              @part_use = split (/\s+/, $part_disk);
              $part_use[4] =~ s/%//;
           $part_limit = 95;
              if ($part_use[4] > $part_limit && $part_use[4] ne "Use") {
                 $lb->insert('end', "Warning! $part_use[0Usage Percentage exceeds $part_limit%");
                }
             else {
                   #does nothing
                  }
           }
   

   sub add_host {
                 if (! Exists ($HostAdd)) {
                 $HostAdd = $mw->Toplevel();
                 $HostAdd ->title("ptadmin - Add Host");
                 $HostAdd->geometry("290x210+0+0");
                 $b1 = $HostAdd->Frame(-highlightbackground => 'blue',
                          -highlightthickness => 4)->pack(side=>'top', -fill => 'x');
                    $b2 = $b1->Frame(-highlightbackground => 'blue',
                -highlightthickness => 4)->pack(side=>'top', -fill => 'x');
                 $b2->Label(-text => "Host Name" ) ->pack(-side => 'top');
                 $b2->Entry(-width => 25, -textvariable => \$hostname) 
                         ->pack(-side => 'top');
                 $b2->Label(-text => "IP Address" ) ->pack(-side => 'top');
                 $b2->Entry(-width => 16, -textvariable => \$ipaddress) 
                         ->pack(-side => 'top');
                 $b2->Label(-text => "Fully Qualified Name (hostname.domainname)" ) 
                         ->pack(-side => 'top');
                 $b2->Entry(-width => 25, -textvariable => \$fqdn) 
                         ->pack(-side => 'top');
                 $b2->Label(-text => "Alias" ) ->pack(-side => 'top');
                 $b2->Entry(-width => 15, -textvariable => \$alias) 
                         ->pack(-side => 'top');
              $b1->Button(-text => "Cancel", -command => sub {$HostAdd->destroy})
                                ->pack(-side => 'right');
                    $b1->Button(-text => "Add the Host", -command => \&host_end)
                               ->pack(-side => 'right');
                 } else {
                       $HostAdd->raise();
                        }
   }

   sub host_end {
                 $line_cnt=`cat /etc/hosts|wc -l`;
                 open(OLD, "</etc/hosts") ||print "Could not open hosts";
                 open (NEW, ">/etc/hosts.txt")||print "Could not open hosts.txt";
                 select (NEW);
                 while (<OLD>) {
                                print NEW $_;
                                if ($. == $line_cnt && $ipaddress ne "") {
                                print NEW "$ipaddress\t$fqdn\t$hostname\t$alias\n"; 
                                   }
                                }
                 close (OLD);
                 close (NEW);
                 select (STDOUT);
                 rename ("/etc/hosts", "/etc/hosts.orig")||print "HELP1";
                 rename("/etc/hosts.txt", "/etc/hosts")||print "HELP";
                 @hosts = `cat /etc/hosts`;
                 $how_many = scalar @hosts;
                 for ($count=0;$count<$how_many;$count++){
                      chomp($hosts[$count]);
                      $hosts[$count] =~ s/\t/ /g;
                      }
                 $lb2->delete(0, 'end');
                 $lb2->insert('end',@hosts);

                 $HostAdd->destroy;
   }

   sub DelHost {
                if (!$lb2->selectionIncludes('active')){
                 print "Select Host!";
                   }
               else{
                    my $selected1 = $lb2->get($lb2->curselection());
                    @hosts = `cat /etc/hosts`;
                    $how_many = scalar @hosts;
                    for ($count=0;$count<$how_many;$count++){
                         chomp($hosts[$count]);
                         $hosts[$count] =~ s/\t/ /g;
                         if ($hosts[$count] eq $selected1){
                         $delete_line=$count+1;
                         }
                     }
               $line_cnt=`cat /etc/hosts|wc -l`;
               open(OLD, "</etc/hosts") ||print "Could not open hosts";
               open (NEW, ">/etc/hosts.txt")||print "Could not open hosts.txt";
               select (NEW);
               while (<OLD>) {
                              next if ($. == $delete_line);
                              print NEW $_;
                             }
               close (OLD);
               close (NEW);
               select (STDOUT);
               rename ("/etc/hosts", "/etc/hosts.orig")||print "HELP1";
               rename("/etc/hosts.txt", "/etc/hosts")||print "HELP";
               @hosts = `cat /etc/hosts`;
               $how_many = scalar @hosts;
               for ($count=0;$count<$how_many;$count++){
                     chomp($hosts[$count]);
                     $hosts[$count] =~ s/\t/ /g;
                    }
               $lb2->delete(0, 'end');
               $lb2->insert('end',@hosts);
               }
   }

   sub UserDel {
                if (!$lb3->selectionIncludes('active')){
                 print "Select User!";
                }
                else{
               if (! Exists ($UserWarn)) {
                                $UserWarn = $mw->Toplevel();
                 $UserWarn ->title("ptadmin Warning!");
                 $UserWarn->geometry("200x80+0+0");
                 $b1 = $UserWarn->Frame(-highlightbackground => 'blue',
                    -highlightthickness => 4)->pack(side=>'top', -fill => 'x');
                    $b2 = $b1->Frame(-highlightbackground => 'blue',
                -highlightthickness => 4)->pack(side=>'top', -fill => 'x');
                    $b2->Label(-text => "Warning! User directories \n will be permanently removed!" ) ->pack(-side => 'top');
                    $b1->Button(-text => "Remove the User!", -command => \&RemoveUser)
                                ->pack(-side => 'right');
              $b1->Button(-text => "Cancel", -command => sub {$UserWarn->destroy})
                 ->pack(-side => 'right');
                    } else {
                          $UserWarn->raise();
                           }
           }
         }

   sub RemoveUser{
                     my $selected3 = $lb3->get($lb3->curselection());
                     my @login = split (/\s+/, $selected3);
                     `/usr/sbin/userdel -r $login[0]`;
                     @users = `cat /etc/passwd | awk -F : '{if (\$3 > 99) print \$1"  "  \$3"  " \$4"  " \$5}'`;
                     $how_many = scalar @users;
                     for ($count=0;$count<$how_many;$count++){
                          chomp($users[$count]);
                          }
                    $lb3->delete(0, 'end');
                    $lb3->insert('end',@users);
              $UserWarn->destroy;
           }
   

   sub UserAdd {
                if (! Exists ($UserAdd)) {
                 $UserAdd = $mw->Toplevel();
                 $UserAdd ->title("ptadmin - Add User");
                 $UserAdd->geometry("240x215+0+0");
                 $b1 = $UserAdd->Frame(-highlightbackground => 'blue',
                    -highlightthickness => 4)->pack(side=>'top', -fill => 'x');
                    $b2 = $b1->Frame(-highlightbackground => 'blue',
                -highlightthickness => 4)->pack(side=>'top', -fill => 'x');
                 $b2->Label(-text => 'Login (Required)' ) ->pack(-side => 'top');
                 $b2->Entry(-width => 25, -textvariable => \$login) 
                         ->pack(-side => 'top');
                 $b2->Label(-text => 'User Name (Optional)' ) ->pack(-side => 'top');
                 $b2->Entry(-width => 25, -textvariable => \$username) 
                         ->pack(-side => 'top');
                 $b2->Label(-text => 'Password (Required)' ) ->pack(-side => 'top');
                 $b2->Entry(-width => 25, -show => "*", 
                         -textvariable => \$password) ->pack(-side => 'top');
                 $b2->Label(-text => 'Home Directory (Required)' ) ->pack(-side => 'top');
                 $b2->Entry(-width => 25, -textvariable => \$homedir) 
                        ->pack(-side => 'top');
                    $b1->Button(-text => "Add the User", -command => \&AddUser)
                                ->pack(-side => 'right');
              $b1->Button(-text => "Cancel", -command => sub {$UserAdd->destroy})
                                ->pack(-side => 'right');
                    } else {
                          $UserAdd->raise();
                           }
   }

   sub AddUser {
           $enc_password = crypt($password,L3);
                 `/usr/sbin/useradd -c "$username" -m -d "$homedir" -p $enc_password $login`;
                 @users = `cat /etc/passwd | awk -F : '{if (\$3 > 99) print \$1"  "  \$3"  " \$4"  " \$5}'`;
                 $how_many = scalar @users;
                 for ($count=0;$count<$how_many;$count++){
                      chomp($users[$count]);
                      }
                 $lb3->delete(0, 'end');
                 $lb3->insert('end',@users);
                 $UserAdd->destroy;
   }

   sub HostClear{
               @hosts = `cat /etc/hosts`;
               $how_many = scalar @hosts;
               for ($count=0;$count<$how_many;$count++){
                     chomp($hosts[$count]);
                     $hosts[$count] =~ s/\t/ /g;
                    }
               $lb2->delete(0, 'end');
               $lb2->insert('end',@hosts);
   }

   sub UserClear {
                 @users = `cat /etc/passwd | awk -F : '{if (\$3 > 99) print \$1"  "  \$3"  " \$4"  " \$5}'`;
                 $how_many = scalar @users;
                 for ($count=0;$count<$how_many;$count++){
                      chomp($users[$count]);
                      }
                 $lb3->delete(0, 'end');
                 $lb3->insert('end',@users);
   }
  
   sub ProcClear {
                $lb4->delete(0, 'end');
                @proc = `ps -ef`;
                $how_many = scalar @proc;
                for ($count=0;$count<$how_many;$count++){
                     chomp($proc[$count]);
                    }
                $lb4->insert('end',@proc);
   }

   sub StatsClear {
                   disk();
                   HostClear();
                   UserClear();
             ProcClear();
   }

   
    
    
    
  
Related examples in the same category
1. Time Server with Socket
2. Using Socket to call a Perl CGI
3. Socket server
4. Perl Modules for Networking with Sockets
5. Open a socket
6. Post query to a CGI
7. Query a Perl CGI
8. Listen to a port
9. Using regular expresion to validate an IP address
10. Child handle and parent handle
11. Daytime client, using symbolic host and service names
12. A Perl TCP server without the Socket module.
13. A Simple script to update your host/ip with dyndns.org service.
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.