#!/usr/bin/perl use strict; use Socket; use Sys::Hostname; my $local_port = shift or die "no port"; my $notify_email = shift or die "specify an email to notify"; my $eth1 = `/sbin/ifconfig eth1`; my ($local_ip) = ($eth1 =~ /inet addr:(.*?)\s/); socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp')); setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1); my $my_addr = sockaddr_in($local_port, INADDR_ANY); bind(SERVER, $my_addr) or die "can't bind $!\n"; listen(SERVER, SOMAXCONN) or die "cant listen $!\n"; my $client_address; while($client_address = accept(CLIENT, SERVER)) { my($port, $packed_ip) = sockaddr_in($client_address); my $remote_ip = inet_ntoa($packed_ip); my $date = `/bin/date`; my $data = qq{ IP address $remote_ip tried connection on machine $local_ip local port $local_port at $date }; if (-e "/proc/net/ip_input") { `/sbin/ipfwadm -I -i deny -S $remote_ip/32 -o`; `/sbin/ipfwadm -O -i deny -D $remote_ip/32 -o`; } elsif (-e "/proc/net/ip_fwchains") { `/sbin/ipchains -I input -s $remote_ip/32 -l -j DENY`; `/sbin/ipchains -I output -d $remote_ip/32 -l -j DENY`; } `/bin/echo "$data" | /bin/mail -s "Connection on spy port" $notify_email`; } close(SERVER);