ilpostino Skrevet 20. november 2003 Del Skrevet 20. november 2003 (endret) jeg har ikke så veldig peiling på perl (ennå) så jeg henvender meg derfor til dere som kan det så mye bedre enn meg. Her er scenariet (eller slik jeg har sett for meg at det løses): Jeg mater scriptet med en gitt ip-adresse (klasse c-adresse). det bør også kunne hente ip-adressen til maskinen selv. (vet at php har støtte for å hente ip-adresser og da bør vel perl ha det også synes jeg....) Scriptet kutter så av den siste oktetten av ip-adressen. Så legger den tallene 1-254 til ip-adressen som 'erstatning' for den oktetten som ble fjernet. Disse ip-adressene skrives så til en gitt fil. Eksempel: Scriptet får adressen 172.25.5.111. Så skriver scriptet ut alle adressene mellom 172.25.5.1 -> 172.25.5.254 til en fil (helst i stigende rekkefølge). noen som klarer dette? edit1: kunne sikkert laget dette selv i php men vil gjerne ha det i perl da det er mer integrert i linux. Endret 20. november 2003 av ilpostino Lenke til kommentar
Torbjørn Skrevet 20. november 2003 Del Skrevet 20. november 2003 (endret) selvsagt! my ($ip) = shift || (`/sbin/ifconfig -a` =~ /inet addr:([\d\.]*)/)[0]; ((my $netaddr) = $ip =~ /^(.*)\.\d*$/) || die "no IP found!"; print $netaddr,'.',++$i,"\n" until $i == 254; kjør: "perl dette_programmet.pl" > din_fil.txt for å lagre det i en fil. angi IP på kommandoinja ellers finner den maskinens ip selv. edit: ikke vits å bruke Sys::HostIP til dette, som jeg først hadde. Endret 20. november 2003 av Torbjørn Lenke til kommentar
ilpostino Skrevet 20. november 2003 Forfatter Del Skrevet 20. november 2003 du er absolutt inne på noe her, men dette skriver ikke hele ip-adressen til filen, bare tallene 1 -> 254 Lenke til kommentar
DrDoogie Skrevet 20. november 2003 Del Skrevet 20. november 2003 du er absolutt inne på noe her, men dette skriver ikke hele ip-adressen til filen, bare tallene 1 -> 254 Funker fett her. 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14 192.168.1.15 192.168.1.16 192.168.1.17 192.168.1.18 192.168.1.19 192.168.1.20 192.168.1.21 192.168.1.22 192.168.1.23 192.168.1.24 192.168.1.25 192.168.1.26 192.168.1.27 192.168.1.28 192.168.1.29 192.168.1.30 192.168.1.31 192.168.1.32 192.168.1.33 192.168.1.34 192.168.1.35 192.168.1.36 192.168.1.37 192.168.1.38 192.168.1.39 192.168.1.40 192.168.1.41 192.168.1.42 . . . Siste linja sammenføyer jo $netadr med $i. Lenke til kommentar
ilpostino Skrevet 20. november 2003 Forfatter Del Skrevet 20. november 2003 du har helt rett. tok bare copy-and-paste og dette funket ikke. satte dette inn i filen: #!/usr/bin/perl og da funket det. takk for hjelp Lenke til kommentar
Torbjørn Skrevet 20. november 2003 Del Skrevet 20. november 2003 hvis du hadde kjørt "perl filnavn.pl" (som jeg faktisk skrev), hadde du ikke trengt she-bang (#!/usr/bin/perl) </hva-sa-jeg-mode> Det kunne kanskje vært interessant å utvide skriptet til å hente reell nettmaske istedet for å anta at den er 255.255.255.0 på den annen side er det kanskje ikke så interessant å ha f.eks 65000 iper i en fil Lenke til kommentar
ilpostino Skrevet 20. november 2003 Forfatter Del Skrevet 20. november 2003 nei, var det jeg også tenkte på. bør holde å forholde seg til 255 forskjellige hoster. er det mye som eventuelt skal til for å få den til å sjekke ip-klasse/subnet-mask? prøvde først å kjøre scriptet slik du sa, men da fikk jeg feilmelding mens jeg ikke fikk feilmelding når jeg slang på den extra linjen..... (av en eller annen grunn) Lenke til kommentar
Torbjørn Skrevet 20. november 2003 Del Skrevet 20. november 2003 den linjen fortelle systemet hvilket program som skal kjøre skriptet. dette kalles for en såkalt "she-bang", og gjør at man kan ta et hvilket som helst skript og kjøre som ./filnavn.pl (kan være php, python, shell skript, hva som helst) så lenge første linje viser hvilket program som skal kjøre skriptet, eks: #!/usr/bin/perl, #!/usr/bin/python, #!/bin/bash, etc... skriver du "which perl" på kommandolinja, vil du se at perl ligger i /usr/bin/perl og for ordens skyld: hvis du fjerner #!/usr/bin/perl og kjører "perl filnavn.pl", så skal det fortsatt fungere, da kjører du bruker du perl til å kjøre programmet uansett hva som står øverst. Angående netmask, det blir nok ikke så vanskelig. vet ikke hvor klart det går fram, men dette programmet kjører systemkommandoen "/sbin/ifonfig" og sjekket resultatet av denne. det betyr at hvis du kjører programmet på en windows maskin, så vil det ikke fungere! (du spesifiserte imidlertid linux) hvis du ser på output fra ifconfig, ser det slik ut (for meg): lindahl@k-086124(~)$ /sbin/ifconfig -a eth0 Link encap:Ethernet HWaddr 00:01:02:A3:4F:08 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:78438637 errors:0 dropped:0 overruns:41 frame:0 TX packets:51802947 errors:0 dropped:0 overruns:0 carrier:809 collisions:0 txqueuelen:1000 RX bytes:2956847829 (2819.8 Mb) TX bytes:3183576482 (3036.0 Mb) Interrupt:11 Base address:0xdc00 eth1 Link encap:Ethernet HWaddr 00:50:04:12:F1:C7 inet addr:129.241.86.124 Bcast:129.241.87.255 Mask:255.255.254.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:146918210 errors:4 dropped:0 overruns:143 frame:4 TX packets:142453061 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3048577048 (2907.3 Mb) TX bytes:2055241607 (1960.0 Mb) Interrupt:10 Base address:0xe000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:346460 errors:0 dropped:0 overruns:0 frame:0 TX packets:346460 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:108633562 (103.6 Mb) TX bytes:108633562 (103.6 Mb) første forekomsten av strengen "inet addr:" blir brukt for å finne IP'en, i dette tilfellet 192.168.1.1. På samme linje står også netmask, og denne kan like enkelt hentes ut som ip. problemet videre blir litt binær-matematikk, men burde være fullt overkommelig. Det blir riktig nok ikke så pent og pyntlig som den første løsningen. Spør gjerne om du er interessert i å vite hvordan så lite programkode kan gjøre så mye Lenke til kommentar
Torbjørn Skrevet 20. november 2003 Del Skrevet 20. november 2003 En annen ting, hvis du er ute etter å ping-sveipe eller å skanne, så klarer "nmap" ganske mye, også for vanlige brukere. liste iper: nmap -nsL 192.158.1.0/24 pingsveip: nmap -sP 192.158.1.0/24 Lenke til kommentar
ilpostino Skrevet 20. november 2003 Forfatter Del Skrevet 20. november 2003 vet at nmap har ganske god funksjonalitet på å kartlegge diverse ting i et nettverk.... har for tiden fping til diverse utprøving om dagen....skal kaste meg over nmap ganske snart...lest endel dokumentasjon om programmet og det virker ganske bra. tenkt til å bruke scriptet sammen med fping forresten..... Lenke til kommentar
ilpostino Skrevet 20. november 2003 Forfatter Del Skrevet 20. november 2003 Holder på å sette meg inn i endel sikkerhets-verktøy for Linux om dagen. Har brukt endel Linux før og holder nå på å konvertere helt til Linux (Suse 9). Går på et studie som heter "Digital sikkerhet og etteretning" som nettop tar for seg endel slike ting som fping og nmap,...... Lenke til kommentar
Torbjørn Skrevet 21. november 2003 Del Skrevet 21. november 2003 perl er kan brukes til en masse system administrative oppgaver (og gjør også det i mange distroes) perl er meget nyttig å ha i gabasjen Lenke til kommentar
ilpostino Skrevet 21. november 2003 Forfatter Del Skrevet 21. november 2003 kjøpte en perl-bok for leeeeeenge siden men gadd aldri sette meg inn i det da jeg aldri helt fikk det til (i tilleg til at jeg kjørte Windows). nå holder jeg på å bytte ut Windows med Linux og skal tørke støv av perl-boken og bruke det til å (mis)bruke linux skikkelig... Lenke til kommentar
Torbjørn Skrevet 22. november 2003 Del Skrevet 22. november 2003 det er omtrent samme måten jeg lærte meg perl på til å begynne med. linux er et naturlig utviklermiljø når det kommer til skripting. Lenke til kommentar
Torbjørn Skrevet 22. november 2003 Del Skrevet 22. november 2003 (endret) Her er en variant som henter ut reell bitmaske og skriver ut alle hoster på reelt subnett, den leser mao inn netmask. #!/usr/bin/perl use Socket; my ($ip,$mask)=map {inet_aton($_)}(`/sbin/ifconfig -a`=~/inet addr:([\d\.]*).*Mask:([\d\.]*)/)[0,1]; my $i = unpack("N",($ip & $mask)); # startverdi - er også lik nettverksadressen print inet_ntoa(pack("N",$i)),"\n" until ++$i == unpack("N",($ip & $mask)) + unpack("N",~$mask); Ser kanskje litt kryptisk ut, må bruke Socketmodulen for å få tigang til et par sjekke funksjoner, inet_aton og inet_ntoa edit: prøvde å unngå line breaks i koden. Endret 22. november 2003 av Torbjørn Lenke til kommentar
saivert Skrevet 31. juli 2006 Del Skrevet 31. juli 2006 #!c:\perl\bin\perl.exe # Denne virker på Windows # Testet under ActiveState Perl versjon 5.8.8 use Socket; # Sorry, prøvde meg på dette uten hell: # my $ip = inet_aton( (`ipconfig /all` =~ /IP Address(. )*: ([\d\.]*)/)[1] ); # my $mask = inet_aton( (`ipconfig /all` =~ /Subnet Mask(. )*: ([\d\.]*)/)[1] ); my ($ip,$mask)=map {inet_aton($_)}(`ipconfig`=~/IP Address(. )*: ([\d\.]*).*Subnet Mask(. )*: ([\d\.]*)/)[1,3]; my $i = unpack("N",($ip & $mask)); # startverdi - er også lik nettverksadressen print inet_ntoa(pack("N",$i)),"\n" until ++$i == unpack("N",($ip & $mask)) + unpack("N",~$mask); Hvorfor fungerte ikke de linjene som jeg har kommenter ut over. Lenke til kommentar
Torbjørn Skrevet 31. juli 2006 Del Skrevet 31. juli 2006 det fungerte fint på windows 2000, med perl v 5.6.1. Jeg måtte bare bruke IP-adresse og Nettverksmaske i mine regex siden jeg har norsk windows Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå