#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use URI::URL; use HTML::TreeBuilder 5 -weak; my $server=$ARGV[0]; die("Bitte Server angeben!\n") unless $server; my $ua=LWP::UserAgent->new(); my %sites; my @stack=(URI::URL->new($server)); while(@stack) { my $url = shift(@stack); next if $sites{$url}; $sites{$url}++; my $res=$ua->get($url); if($res->is_error()) { warn "$url -> ".$res->status_message()."\n"; next; } my $html=$res->decoded_content(); next unless $html; # gehe alle HTML-Tags durch: HTML::TreeBuilder->new()->parse_content($html)->look_down(sub{ # hole src-Verweis: my $new_src=bereinige_url($_[0]->attr('src'),$url); $sites{$new_src}++ if $new_src; # hole href-Verweis: my $new_href=bereinige_url($_[0]->attr('href'),$url); push(@stack,$new_href) if $new_href; return 0; }); } # alle Verweise Ausgeben: print "$_\n" for sort keys %sites; ######################################################################## sub bereinige_url { my ($link,$base)=@_; return undef unless $link and $base; return undef if $link=~/^(?:javascript|mailto)/s; my $url=URI::URL->new($link,$base); return undef unless $url; # absolute URL: $url=$url->abs(); # auf dem selben Server bleiben: return undef if $base->host() ne $url->host(); # entferne alle Parameter: $url->params(undef); $url->query(undef); return $url; }