Sven: HTTP Banner einlesen?

Hi,

uff, kann mir mal jemand auf die Sprünge helfen wie ich einen kompletten HTTP banner via Perl einlesen kann? Meine Versuche (siehe unten) tun nicht ganz das was sie sollen (sie liefern nichts!!!)

Danke euch!

myTry:
sub http_ident
{
# Bilden der Socket-Adresse (Port und IP)
$iaddr=inet_aton($Host) or die "Kann Server nicht auflösen!\n";
$paddr=sockaddr_in(80,$iaddr) or die "Kann keine Socket-Adresse bilden!\n";
  
# Erstellen des Socket
socket(Socket,PF_INET,SOCK_STREAM,getprotobyname('tcp')) or die "Kann keinen Socket erstellen!\n";
  
# Mit Socket verbinden
connect(Socket,$paddr) or die "Keine Verbindung möglich!\n";
  
# HTTP Request an Socket senden
send Socket,"HEAD / HTTP/1.1\n\n",0;

#$response = <$Socket>;
#print "$response\n";
#print LOG "$response\n";
  
# Auslesen der Rueckgabewerte des Servers
while(<Socket>)
{

print LOG "$_";
  ($tag,$value)=split /:/,$_;
  if ($tag=~/Server/i)
  {
   $Server_Typ= "Server:$value";
   last;
  }
}
}

  1. Hi,

    uff, kann mir mal jemand auf die Sprünge helfen wie ich einen kompletten HTTP banner via Perl einlesen kann?

    Du meinst, Du möchtest den Inhalt einer über HTTP verfügbaren Datei in eine Variable (oder Datei oder so) speichern? Tja... dann bist Du wohl über's Ziel hinausgeschossen:

    #!/usr/bin/perl -w
    use strict;
    use LWP::Simple;
    getprint('http://www.cpan.org/');

    (Kein CGI-Script, HTTP-Header fehlt.)
    Mehr dazu siehe perldoc LWP::Simple.

    Meine Versuche (siehe unten) tun nicht ganz das was sie sollen (sie liefern nichts!!!)

    Naja, Du machst ja auch nur einen HEAD-Request... :-)

    Cheatah

    1. Hi,

      danke erstmal!

      Naja, Du machst ja auch nur einen HEAD-Request... :-)

      *äfz* ich drück mich immer falsch aus... ich möchte auch einfach diesen "HEAD-Request" haben (ich dachte das heisst Banner). Aber der Server an dem ich das teste sagt immer was von "permission denied" oder liefert nichts!

      Das gleiche würde ich dann auch gerne für FTP umsetzen (dient alles zur Analyse des Rechners um eine komplette Aufstellung des Nezwerks zu automatisieren, so z.B. den Webserver zu ermitteln, den FTP Server zu ermitteln etc.)

      Geht das mit FTP ähnlich wie mit HTTP?

      danke nochmal,
      Sven

      1. Hi,

        da du bestimmt mehr willst als nur den Servername,
        gleich die anderen Basicsachen dazu:

        ------------------------------------------------
        $url = "http://www.gmxsucks.de";
        use LWP::UserAgent;

        $ua= new LWP::UserAgent;
        $ua->agent("Swens Head-Checker");

        $request= new HTTP::Request('HEAD',$url);
        $response = $ua->request($request);
        $date = localtime($response->date);
        print "date            : $date\n";
        $expires = localtime($response->expires);
        print "expires         : $expires\n";
        $content_type = $response->content_type;
        print "content_type    : $content_type\n";
        $last_modified = localtime($response->last_modified);
        print "last_modified   : $last_modified\n";
        $content_encoding = $response->content_encoding;
        print "content_encoding: $content_encoding\n";
        $content_length = $response->content_length;
        print "content_length  : $content_length\n";
        $title = $response->title;
        print "title           : $title\n";
        $server = $response->server;
        print "server          : $server\n";
        $base=$response->base;
        print "base            : $base\n";
        print "\n";
        ------------------------------------------------

        1. Hi,

          da du bestimmt mehr willst als nur den Servername,
          gleich die anderen Basicsachen dazu:

          Superklasse! Vielen Dank!!!
          mfg
          Sven

  2. uff, kann mir mal jemand auf die Sprünge helfen wie ich einen kompletten HTTP banner via Perl einlesen kann? Meine Versuche (siehe unten) tun nicht ganz das was sie sollen (sie liefern nichts!!!)

    s/Banner/Header/

    Benutze ich als Kommandozeilen Tool:

    #!perl
    use IO::Socket ':crlf';
    use URI::URL;

    my $uri = url(shift) die "Aufruf mit: http-head.pl http://host:port/path?query\n";
    my $timeout = '5';

    my $sock = IO::Socket::INET->new(PeerAddr => $uri->host,
         PeerPort => $uri->port,
         Proto    => 'tcp',
         Timeout  => $timeout,
            );
    unless ($sock) {
        $@ =~ s/^.*?: //;
        die "Verbindung zu $uri->host:$uri->port schlug fehl ($@).\n";
    }

    select($sock);

    print "HEAD ", $uri->path_query, " HTTP/1.1", CRLF;
    print "Connection: close", CRLF;
    print "Host: ", $uri->host, ":", $uri->port, CRLF;
    print CRLF;

    select(STDOUT);
    print <$sock>;

    Ansonsten LWP::UserAgent benutzen, Header Request machen und as_string() ausgeben.