Hello monks, I haven`t posted for a while.
I`ve finalized my network script, still it`s in beta tho, because I am learning Perl more and more. Here is it
#!/usr/bin/perl -w
######################################################################
+##
#A nifty script for manipulatina and automating some networking in Arc
+h linux, it uses the tools: #
#iwlist, iwconfig, dchpcd/dhclient and netcfg with wpa_supplicant for
+it`s tasks. It pings yahoo.com to #
#determine the network satus and then executes some tasks from the pse
+udo code below. The script is #
#imperative and for now no package or modularization is needed since i
+t is small task. #
#Beta:
+ #
#Date: 14/05/2012 last edited on 24/05/2012
+ #
#Ilian Zapryanov
+ #
#heatblazer@gmail.com
+ #
######################################################################
+##
#While waiting for user quit or continue:
+ #
# If not quit, check do we have net:
+ #
# while we don`t check various added networks:
+ #
# if we can`t connect to wifi, connect the mtel usb 3G
+ #
# kill all wifi dhclients and start using mtel
+ #
# If pressed C^+D kill all all network and self kill th
+e script #
######################################################################
+##
use strict;
############### S U B R O U T I N E S
+ ###############
#PROMPT
sub prompt {
print shift, "\n";
chomp(my $inp = <STDIN>);
return $inp or "";
}
#Process data file
sub process_data {
my $net_name = shift;
#open that file and concat the data to it, set the name to somethi
+ng verbose and
#understandable, for now it will be sv_vlas.txt since this netwrok
+ works there
open(FH, "> $net_name") or die "Can`t open the variable for writin
+g: $!\n";
while ( <DATA> ) {
print FH $_; #record data from beta_net file to temporary file
+
}
print "Recorded data to : /home/$net_name";
}
######################################################################
+##
my $netcfg_var = "sv_vlas";
print ("Killing all available DHC/DHCPCDs...\n");
system("killall dhcpcd") ? print "Killed dhcpcd.\n" : print "dhcpcd is
+ dead or not present\n";
system("killall dhclient") ? print "Killed dhclient. \n" : print "dhc
+lient is dead or not present\n";
system("ifconfig | grep wlan0") ? print "wlan0 is up and ready\n" : sy
+stem("ifconfig wlan0 up");
print "PRESS 'RETURN' TO START NETWORKING OR CTRL+D TO QUIT \n";
#Test process data
while ( chomp(my $inpt = <STDIN>) != 0 ) {
my $retry = 0;
my $nstat = system("ping -c 2 yahoo.com > /dev/null 2>&1");
print "Current network status is $nstat. \n";
while ( $nstat != 0 )
{ # do we have net?
#if not try to scan and connect to our nets
system("ifconfig wlan0 up") if ( (my $ifconf = `ifconfig`)
+ !~ /wlan0/ );
my $work_net = system('iwlist scan | grep "GKT" ') and $re
+try++;
my $home_net = system("iwlist scan | grep 'ilian' ") and $
+retry++;
my $vlas_home = system("iwlist scan | grep 'VIVACOM_NET' "
+) and $retry++;
my $mtel = system("lsusb | grep \"Huawei\"") and $retry++;
+
if ( $home_net == 0 ) {
print "Connected on $retry attempt.\n";
system("killall dhcpcd | killall dhclient ") or print
+"Reset network .. \n";
system("iwconfig wlan0 essid \"ilian\" key 1234512345"
+ );
system("dhcpcd wlan0");
$nstat = system("ping -c 2 yahoo.com");
last if $nstat == 0 ;
}
elsif ( $work_net == 0 ) {
print "Connected on $retry attempt.\n";
system("killall dhcpcd | killall dhclient ") or print
+"Reset network .. \n";
system("iwconfig wlan0 essid \"GKT\" key s:joana" ) ;
system("dhcpcd wlan0");
$nstat = system("ping -c 2 yahoo.com");
last if $nstat == 0 ;
}
#this requires netcfg daemon with a custom script added to
+ it from /etc/network.d/ (see __DATA__ below )
elsif ( $vlas_home == 0 ) {
print "Connected on $retry attempt.\n";
system("killall dhcpcd | killall dhclient " ) or print
+ "Reset network .. \n";
process_data($netcfg_var); #THIS GOES IN USER`s HOME D
+IR
system("netcfg sv_vlas") or die("Can`t connect to file
+ in home dir\n");
system("dhcpcd wlan0");
$nstat = system("ping -c 2 yahoo.com");
last if $nstat == 0;
}
elsif ( $mtel == 0 ) {
print "Connected on $retry attempt.\n";
print "Stopping dhcpcd, dhclient..\n";
#downs wifi too here...
system("killall dhcpcd | killall dhclient | ifconfig w
+lan0 down");
system("netcfg -d $netcfg_var"); #make a global variab
+le here... please
print ("Trying mtel gprs...\n");
system("wvdial") or print("Can`t start mtel gprs...\n"
+);
$nstat = system("ping -c 2 yahoo.com");
last if $nstat == 0;
}
elsif ( $retry % 8 == 0 ) {
print "$retry attempted... probably no networks availa
+ble...\n";
print "Continue?\n";
print "Press 'ENTER' to continue or CTRL+D to quit the
+ script: ";
last;
}
} #end net set loop
} #end check net loop
#kill networks and clean all
print "FINISHED NETWORKINGS....\n";
system("killall dhclient") ? print"Killed." : print "No dhclient";
system("kiallall dhcpcd") ? print "Killed. " : print "No dhcpcd";
system("netcfg -d $netcfg_var") ? print "Stopped mynet" : print "No my
+net";
print "Bye, bye :) Come again :)\n\n";
#suicide script too
system("killall beta_net");
#data for netcfg Sv.vlas network
__DATA__
CONNECTION='wireless'
DESCRIPTION='A simple WPA encrypted wireless connection'
INTERFACE='wlan0'
SECURITY='wpa'
ESSID='VIVACOM_NET'
## Uncomment if the supplied ESSID is hexadecimal
#ESSID_TYPE='hex'
KEY='t1o2d3o4r5'
IP='dhcp'
# Uncomment this if your ssid is hidden
#HIDDEN=yes
Hope some Arch users will find it useful. Make sure to replace the __DATA__ and some if-elses with your own.