#!/usr/bin/perl # Time-stamp: "2005-08-19 01:17:45 ADT" # # desc{ black-hole proxy server } sburke@cpan.org # use strict; use IO::Socket qw(:DEFAULT :crlf); use constant MY_PORT => 9123; use constant DEBUG => 0; my $image_type = 'image/gif'; my $image = "$ENV{'HOME'}/public_html/null.gif"; { if(open(IN, "<$image")) { binmode(IN); local $/; $image = join '', "HTTP/1.0 200 OK", CRLF, "Content-Type: ", $image_type, CRLF, CRLF, ; close(IN); } else { # Default image: $image = join '', "HTTP/1.0 200 OK", CRLF, "Content-Type: ", $image_type, CRLF, CRLF, # 8x8 image: box with a border. "\x47\x49\x46\x38\x37\x61\x08\x00\x08\x00\xb3", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\x40\x40", # Inside box color "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00", # Outside border color # Actual gif data: "\x2c\x00\x00\x00\x00\x08\x00\x08\x00\x00\x04\x0e\xf0\xc9\x49", "\xeb\x3c\xf8\xd0\xac\x6f\xde\x9f\x25\x52\x11\x00\x3b", ; } } #----------------------------------------------------------------------------- my $quit = 0; $SIG{'INT'} = sub {$quit = 1}; my $sock = IO::Socket::INET->new( Listen => 20, LocalPort => shift(@ARGV)|| MY_PORT, Timeout => 60 * 60, Reuse => 1, ) or die "Can't create listening socket: $!\n"; DEBUG and warn "Waiting for connections...\n"; my($session, $peer, $port); while(!$quit) { next unless my $session = $sock->accept; if(DEBUG) { $peer = gethostbyaddr($session->peeraddr, AF_INET) || $session->peerhost; $port = $session->peerport; warn "Connection from [$peer,$port] at ", scalar(localtime), "\n"; } #select($session); #++$|; #select(STDOUT); print $session $image; close($session); DEBUG and print " (Closed)\n"; } DEBUG and print STDERR "Byebye\n"; close($sock); exit 0;