Forum Linux.pl
Programowanie => Inne => Wątek zaczęty przez: Ishyn w 2006-06-06, 20:55:16
-
Zainstalowałem sobie Mandrive 2006 PL - jest to mój pierwszy LINUX. Nie posiada on sterowników do tego urządzenia. Czy jest możliwość \\"ręcznego\\" dodania sterowników? I ewentualnie jak je dodać? Jakieś propozycje?
-
Witam mam problem z zapetleniem czesci kodu.
Mianowicie pisze skrypt startowy do linuxa w ktorym mamy do wyboru kilka opcji dotyczacych nadawania adresu IP badz z serwera DHCP lub wpisanego recznie.
Problem polega na tym ze jezeli ades IP bedzie wartoscia nieprawdziwa (za duzo cyfr, oktety powyzej 255 itp) program ma sie zatrzymac i powrocic do wpisania ponownie zle wpisanego adresu ip.
Ponizej zamieszczam czesc kodu ktora odpowiada za reczne wpisanie adresu oraz procedure sprawdzajaca prawdziwosc IP.
# Start manual conf dla eth0
if ($wybor eq 4)
{
while(1)
{
# Pobierz adres IP dla interfejsu
print "Podaj adres IP: ";
$adres_ip = ;
chomp $adres_ip;
if ($adres_ip) {
check_ip_addr();
}
# Pobranie Maski Podsieci
print "Podaj maske podsieci: ";
my $maska_podsieci = ;
chomp $maska_podsieci;
check_ip_addr();
# podaj adres Bramy
print "Podaj adres bramy: ";
my $brama = ;
chomp $brama;
check_ip_addr();
# Pobierz adres serwera DNS
print "Podaj adres primary DNS: ";
my $dns_1 = ;
check_ip_addr();
print "Podaj adres secondary DNS: ";
my $dns_2 = ;
check_ip_addr();
my $konfig = `/sbin/ifconfig eth0 $adres_ip $maska_podsieci`;
my $bramka = `/sbin/route add default gw $brama`;
# Dopisz adresy DNS do /etc/resolv.conf
my $plik = "/etc/resolv.conf";
open FILE, ">$plik" or die "Otwarcie pliku '$plik' do zapisu nie powiodlo sie: $! ";
print FILE "nameserver $dns_1";
print FILE "nameserver $dns_2";
close FILE;
}
}
}
sub check_ip_addr
{
if ($adres_ip =~ /^(dd?d?).(dd?d?).(dd?d?).(dd?d?)$/)
{
my @table = ($1, $2, $3, $4);
foreach $octect (@table)
{
if ($octect le 255)
{
last;
} else
{
print ("You write wrong IP ADDRESSn");
}
}
}
else
{
print ("You write wrong IP ADDRESSn");
}
}
-
Nie jestem hakerem perla, ale sprobuje ci pomoc. Chcialbym jednak zebys sprecyzowal co jest problemem, bo z postu nie wynika to jednoznacznie.
Zrozumialem tylko, ze problem masz z petla, ale nie zrozumialem jaki...
Moge sie domyslac, ze zadaniem programu jest: pytanie o ip, dns, route, itd... pozniej w zaleznosci od tego czy zostana podane poprawne wartosci, przechodzi dalej, w przypadku bledu w jednej z nich pyta _tylko_ o ta wartosc i konczy sie..? Czy tak?
Pozdro
-
Nie dziw si*, *e program si* zap*tla, bo nigdzie p*tli nie przerywasz :) Do tego funkcja check_ip_addr jest *le napisana (np sprawdza tylko pierwsz* poprawn* liczb* z adresu ip).
Spr*buj mo*e rozwi*za* ten problem na takie zasadzie (oczywi*cie dostosuj go do swoich potrzeb):
my $adres_ip = pobierz_ip("Podaj adres IP: ");
my $maska = pobierz_ip("Podaj mask* podsieci: ");
sub pobierz_ip
{
my $message = shift;
my $ip = "";
while(1)
{
print $message."n";
$ip = ;
chomp $ip;
my $regexp = "([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])";
if($ip !~ /^$regexp.$regexp.$regexp.$regexp$/)
{
print "Niew*a*ciwy adres IP!!n";
next;
}
last;
}
return $ip;
}
Mo*esz te* u*y* gotowych modu**w perla do walidacji IP, co skr*ci znacznie skrypt. Poczytaj na przyk*ad to: http://search.cpan.org/~neely/Data-Validate-IP-0.04/lib/Data/Validate/IP.pm
-
Przepraszam za polskie znaki :/