Re: [squid-users] monitor for port 3138 and 3130

From: Colin Campbell <sgcccdc@dont-contact.us>
Date: Fri, 2 Nov 2001 09:45:42 +1000 (EST)

Hi,

Here's a little piece of code I wrote as part of a generic tcp monitoring
program. It handles sites reachable directly and sites reached through a
proxy. Since I've hacked it from that program I make no guarantees that
it'll work "out of the box". For anyone who doesn't recognise it, it's
perl :-).

On Thu, 1 Nov 2001, Deb Heller-Evans wrote:

> Hi,
>
> I need to set up a monitor to tell me whether the port on
> my proxy service is alive or non-responsive.

First is the sub "http" that does the HTTP query
------------------------------------------------------------------------
sub http {
    my %args = @_;

    # Make a connection to the specifed server or proxy and send:
    # $command $scheme://$host$port$path $protocol/$version\r\n\r\n
    # Expect a HTTP response code.

    # set up parameters from %args or "sensible" defaults
    my $command = $args{Command} || 'HEAD';
    my $scheme = $args{Scheme} || 'http';
    my $host = $args{Hostname} || 'localhost';
    my $server = $host;
    my $port = $args{Port} || 80;
    my $server_port = $port;
    my $path = $args{Path} || '/';
    my $protocol = $args{Protocol} || 'HTTP';
    my $version = $args{Version} || '1.0';
    my $match = $args{Match} || "HTTP\/\d\.\d\s+(200|30[12]|401)\b";

    # default command - talking direct to server
    my $cmd = "$command $path $protocol/$version\r\n\r\n";

    # handle proxy requirements
    if (defined $args{Proxy}) {
        $server = $args{Proxy};
        $server_port = $args{ProxyPort} || 80;
        print "connect via proxy $server, port $port\n" if $DEBUG;
        $port = ($port == 80) ? "" : ":$port";
        $cmd = "$command $scheme://$host$port$path $protocol/$version\r\n\r\n";
    }

    my $sock = make_connection($server, $server_port);
    my $sock = IO::Socket::INET->new(PeerAddr => $server,
                PeerPort => $server_port,
                Proto => "tcp",
                Type => SOCK_STREAM);
    if ($sock) {
        $sock->autoflush(1);
    }
    else {
        die "$args{Hostname}: connection to $server:$server_port failed: $!";
    }

    my $in;
    my $out;

    $sock->send($cmd);
    print "sent: $cmd\n" if $DEBUG;
    print "want: ", $match, "\n" if $DEBUG;

    $in = <$sock>;
    print "rcvd: $in" if $DEBUG;
    if ($in !~ /$match/) {
        die "$args{Hostname}: unexpected response to $command: $in";
    }

    $sock->close();
}
------------------------------------------------------------------------
The http subroutine could be called as follows to check a site
through a proxy. Note that this checks both the proxy and the remote
site. You could check the proxy simply by treating it as a "direct"
server. As long as it responds (probably with "HTTP/1.0 400 Bad
Request") you can be happy it's working.

http (Hostname => "www.some.domain",
      Path => "/",
      Command => "HEAD",
      Protocol => "HTTP",
      Version => "1.0",
      Proxy => "proxy.my.domain",
      ProxyPort => 80,
      Scheme => "http");

And here's one that just checks the intranet, directly:

http (Hostname => "intranet");

Colin
Received on Thu Nov 01 2001 - 16:45:53 MST

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 17:03:50 MST