Jonhoo Skrevet 3. november 2006 Del Skrevet 3. november 2006 Heisann folkens Har ikke drevet med Perl på en god stund nå, men hadde lite å gjøre og bestemte meg for å gjenoppbygge kunnskapene litt. Tenkte derfor å lage et lite script som koblet seg opp til en webserver og så etter et bestemt ord og deretter lagret det til en lokal fil. Da jeg hadde holdt på med det en stund la jeg bare til mer og mer, og endte til slutt opp med følgende script: Scriptet kobler seg opp til en webserver og ser etter kildekoden til PHP filer. Det er ikke ment som et hackerverktøy, men mer som en sikkerhetssjekk for å sikre at du ikke har latt noen kildefiler ligge igjen på nettstedet ditt. Vil gjerne ha kommentarer på sourcekode (har prøvd å kommentere den så godt som mulig...) Source finner dere i pastebin her: http://pastebin.ca/236637 Eller dere kan laste ned filen under hostchecker.perl Lenke til kommentar
Torbjørn Skrevet 4. november 2006 Del Skrevet 4. november 2006 Hei, det var et langt script som sikkert kan kommenteres i det lante og det brede. her er et par kommentarer: 1) Bra at du bruker use strict! Veldig bra! 2) Getopt::Long er fin for command line options. Synd å finnd opp for mange hjul 3) bruk "x" operatoren istedet for en for-loop, ex: print STDOUT "#" x $div1 4) smakssak, men jeg pleier å bruke unless() istedet for if(! ). Synes skoden blir behageligere lesbar da. 5) URI er ganske fin for også å parse URI's 6) Du trenger sjelden sette 0 som startverdi for et flag, ex: $blacklisting = 0; # det holder med å bare definere variabelen så er den også false i alle logiske sammenhenger 7) File::Slurp er med i core og fin for å lese inn filer i ett. Den er binært sikker og. istedet for open, @arr=<foo>; close type kode. 8) Istedet for if ($customdirfile != 0) kan du si if(!$sustomdirfile) eller unless($customdirfile). se 4) 9) bruk "or die" når du åpner filer! open(LOGOUT, ">$logtofile") or die "failed opening log file!\n"; # file opens er ofte kritiske. 10) en webserver trenger ikke svare på ping. trenger du sjekke dette? (det begrenser bruken av scriptet til root!) 11) LWP::UserAgent håndterer cookies ganske bra. Trenger du virkelig noe annet enn default cookie-oppførsel? ex: my $ua = new LWP::UserAgent( agent => $agentstring, cookie_jar=>{ file => "$ENV{HOME}/.cookies.txt" } ); 12) kjenner du for-loop syntaksen som går slik: for my $ext ( @commonexts ){ ... Det er unødvendig å sette opp teller apparat opp til størrelsen av en array hvis du kun skal bruke tellervariabelen til å hente ut gitte element fra dette arrayet. 13) bruk == 200 og ikke regex =~ /200/ ! Husk at det er mye mer enn 200 som er "ok", bruk din useragents "is_success()" metode hvis det er dette du ønsker å sjekke 14) Trenger du å open VALID for append hver gang, holder det ikke å åpne denne for append en gang utenfor loopen og skrive til VALID hver gang du føler for det? 15) open(READ200, .... # <---- File::Slurp forenkler slik kode såpass mye at du vil fort venne deg til denne istedet 16) HTTP error codes er mye mer nyansert enn det bildet du gir brukeren av ditt script! 17) hvorfor trenger du sleep? Tar ikke disse operasjonene lang nok tid til at brukeren "synes" at han kjører et program? Eller hvis du ikke vil stresse webserverene, så ok. 18) du demonstrerer god forståelse av streams ved din bruk av select 19) trenger du sette navn på din if-setning? bruk kommentarer! Det var en første-revisjon, andre har sikkert andre kommentarer og du har antagelig mot-kommentarer Lenke til kommentar
Jonhoo Skrevet 4. november 2006 Forfatter Del Skrevet 4. november 2006 Wow! Takk for kommentarer Har gjort en del endringer nå, men noen småting...: 5) Hvorfor burde jeg bruke den istedenfor? 11) Nei, gjør vel ikke det, men synes syntaxen var lettere + at man ikke trenger en separat fil 12) Jeg kan ikke bruke den syntaxen grunnet: PHP splice(@commondirs,$i,1); # Removing folder from folder list #Reset for loops $j = -1; $k = -1; if ($i == @commondirs) 16) Trengs det virkelig å gis så mye mer informasjon? 17) Er for å ikke stresse serveren ja 19) Kommentert ^^ Ny revisjon av scriptet på linken under http://jonhoo.web.surftown.nu/Share/hostchecker.perl Lenke til kommentar
trtrtr Skrevet 10. november 2006 Del Skrevet 10. november 2006 hei, johno bra du deler kode. Kunne ikke scriptet ditt vært smelt sammen til en par linjer montro vha LWP::Simple og en for-loop? du henter jo bare ned endel urls og sjekker innhold, eller? Du kunne evnt starte et par tråder for å få gassen opp litt på testing (om en har mange sider som skal testes (tråder er grise enkelt å lage i perl)) Lenke til kommentar
Jonhoo Skrevet 10. november 2006 Forfatter Del Skrevet 10. november 2006 (endret) Har du noen god introduksjon til hvordan lage dem? Husk at jeg ikke har drevet med dette paa en stund ^^ PS: Tror ikke det ville kunne bli kortet ned veldig med LWP::Simple fordi jeg analyserer tilbakemeldingen jeg faar for hver request... Hvordan skulle dette gaatt noe fortere med LWP::Simple? Endret 10. november 2006 av Jonhoo Lenke til kommentar
Torbjørn Skrevet 10. november 2006 Del Skrevet 10. november 2006 jeg ville heller fork'et enn trådet! Lenke til kommentar
Jonhoo Skrevet 12. november 2006 Forfatter Del Skrevet 12. november 2006 Jeg har naa laget en forket versjon, men den ser ikke like pen ut Du finner den her Lenke til kommentar
Torbjørn Skrevet 12. november 2006 Del Skrevet 12. november 2006 (endret) du vet du kan bruke: $connector->get( "http://".$host ); jeg har aldri trengt å lage min eget HTTP::Request objekt på egenhånd. LWP::UserAgent håndterer alt slikt selv. EDIT: og dette trenger du ikke: foreach (@forks) { waitpid($_, 0); } programmet vil selv vente på sine children... wait trenger du for å begrense hvor mange du eventuelt ville ønske å kjøre samtidig. du forker jo alt uansett nå. Endret 12. november 2006 av Torbjørn Lenke til kommentar
Jonhoo Skrevet 13. november 2006 Forfatter Del Skrevet 13. november 2006 Jeg aner ikke hvorfor jeg gjorde det saa tungvindt med $connector jeg Fikset naa jeg trenger at programmet venter akkurat der nettopp fordi jeg vil at de siste handlingene skal bli kjoert kun en gang.. Eller er det jeg som har misforstaatt forking? ^^ (Det kan forsaavidt godt vaere... Leste bare en kort guide paa det i dag.. ) Lenke til kommentar
Torbjørn Skrevet 13. november 2006 Del Skrevet 13. november 2006 det er vanlig å legge inn "exit" når dine children er ferdig Lenke til kommentar
Jonhoo Skrevet 13. november 2006 Forfatter Del Skrevet 13. november 2006 Det har jeg jo gjort alt.. men jeg vil ikke at parenten skal kjoere koden nedenfor for-loopen foer alle childrene er ferdige Lenke til kommentar
Torbjørn Skrevet 13. november 2006 Del Skrevet 13. november 2006 ah ok, da har du selvsagt gjort det rett kommer sikkert flere tilbakemeldinger når jeg får tid. Sånn litt på si - har du vurdert å modulere koden mer? Det er ganske mye kode for en enkelt-prosedyre. Lenke til kommentar
Jonhoo Skrevet 13. november 2006 Forfatter Del Skrevet 13. november 2006 Hmm.. modulere paa hvilken maate? Vil gjerne laere bedre maater aa kode paa ^^ Lenke til kommentar
trtrtr Skrevet 17. november 2006 Del Skrevet 17. november 2006 -tror han (torbjørn) mener å dele koden opp i subrutiner. det er nødvendig for å gjøre koden mer oversiktelig og lettere å teste. -hvorfor bruker du cookies? disse filene som du ser etter vil ikke være beskyttet av cookies?! -mange server svarer ikke på ping. -i fork'en din, ser det ut som at du blander child og parent (parent får pid til child). -unless er evil : ) forøvrig interessant å se bruk av LWP::ConnCache. Lenke til kommentar
Jonhoo Skrevet 17. november 2006 Forfatter Del Skrevet 17. november 2006 1. Hmm.. Skal ta en titt paa hva som kan gjoeres.. 2. Jeg bruker ikke cookies med mindre brukeren oppgir at han vil bruke det.. Dette er i tilfelle en server benekter tilgang med mindre du har en bestem cookie. 3. Derfor exiter jeg ikke hvis den ikke svarer... 4. Blander dem? Hvordan da? Det er noedvendig at jeg henter inn alle PIDene og legger dem inn i en array.. 5. Fikk beskjed av torbjoern at det var mer oversiktlig Lenke til kommentar
Torbjørn Skrevet 17. november 2006 Del Skrevet 17. november 2006 mer leser-vennlig ga torbjørn beskjed om Lenke til kommentar
Jonhoo Skrevet 17. november 2006 Forfatter Del Skrevet 17. november 2006 Var nesten da ^^ 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å