#!/usr/local/bin/perl
# check_relay.pl v0.25
# Ilker TEMIR (ilker@marketweb.net.tr) - 27/08/1999 : 09/09/1999
# http://ilker.marketweb.net.tr
$|=1;
print "Content-type: text/html\n";
print "\n";
print "<BODY BGCOLOR=#FFFFFF TEXT=#000000>";
print "<TITLE>SMTP Relay Kontrol Yazilimi Web Arabirimi -
v0.25</TITLE>\n";

if ($ENV{'REQUEST_METHOD'} eq "POST") {
  read (STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
} else {
  $buffer=$ENV {'QUERY_STRING'};
}
@pairs=split(/&/,$buffer);
foreach $pair (@pairs) {
  ($name,$value)=split (/=/,$pair);
  $value=~ tr/+/ /;
  $value=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  $contents{$name}=$value;
}

$keyword=$contents{'keyword'};

print "<H3>SMTP Relay Kontrol Yazilimi Web Arabirimi - v0.25</H3>\n";
print "<FORM>\n";
print "Lutfen taranacak domain ve/veya sunuculari giriniz : <INPUT
NAME=keyword><BR>\n";
print "<BR><INPUT TYPE=SUBMIT VALUE=\"Kontrol Et\"></FORM>\n";
print "<BR><H5><A HREF=http://ilker.marketweb.net.tr>Ilker TEMIR</A> (<AHREF=mailto:ilker\@marketweb.net.tr>ilker\@marketweb.net.tr</A>)</H5>\n";

print "<BR>\n";
$keyword=~s/\/|\:|\>|\<|\;|\~|\+|\*|\|//g;
$keyword=~s/\,/ /g;
if ($keyword eq "") {
	exit;
}
print "<B>Taranacak domain(ler) :</B> $keyword<BR><BR>\n";

use Socket;
use Net::DNS;

@PARAM=split(/ /,$keyword);
while ($PARAM[0] ne "") {
	if ($PARAM[0] =~ /marketweb\....\.tr$/i) {
		print "$PARAM[0]: Lokal domain, atlaniyor<BR>\n";
		goto SKIP2;
	}
	@mxlist=();
	$res = new Net::DNS::Resolver;
	$query = $res->search($PARAM[0]);
	$thereisa=0;
	if ($query) {
		foreach $rr ($query->answer) {
			if (($rr->type eq "A") || ($rr->type eq "PTR")) {
				push (@mxlist,$PARAM[0]);
				$thereisa=1;
		        }
		}
	}
	$res = new Net::DNS::Resolver;
	@mx=mx (@res,$PARAM[0]);
	foreach $rr (@mx) {
		if ($rr->preference eq 0) {
			@mxlist=();
			push (@mxlist,$rr->exchange);
		}
		elsif ($thereisa eq 0) {
			push (@mxlist,$rr->exchange);
		}
	}
	if (scalar (@mxlist) eq 0) {
		print "$PARAM[0] icin MX veya A kaydi bulunmuyor<BR>\n";
	}
	else {
		foreach $remote_host (@mxlist) {
			$hostname='';
		
			$sockaddr = 'S n a4 x8';
	
			($name, $aliases, $proto) = getprotobyname('tcp');
	
			$port = 25;
		
			($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
			($name, $aliases, $type, $len, $thataddr) =
gethostbyname($remote_host);
			if (int ($len) eq 0) {
				print "$remote_host : DNS kaydi bulunmuyor<BR>\n";
				goto SKIP;
			}
			
			$this = pack($sockaddr, &AF_INET, 0, $thisaddr);
			$that = pack($sockaddr, &AF_INET, $port, $thataddr);
		
			if (!socket(S, &AF_INET, &SOCK_STREAM, $proto)) { 
				print "Socket acilamadi.<BR>\n"; 
				goto SKIP;
			}
			
			if (!bind(S,$this)) { 
				print "Sockete ulasilamadi<BR>\n";
				goto SKIP;
			}
			
			if (!connect(S,$that)) { 
				print "$remote_host:$port baglanti basarisiz<BR>\n"; 
				goto SKIP;
			}
			
			select(S); $| = 1; select(STDOUT);
		
			$line=<S>;
			if (!($line =~ /^220/s)) {
				print "$remote_host: Hatali SMTP promptu<BR>\n";
				goto SKIP;
			}
			if ($line =~ /netscape/i) {
				print "$remote_host: Netscape mail sunucusu, test edilmedi.<BR>\n";
				goto SKIP;
			}
			if ($line =~ /^220\-/) {
				$line=<S>;
				if (!($line =~ /^220/s)) {
					print "$remote_host: Hatali SMTP promptu<BR>\n";
					goto SKIP;
				}
				if ($line =~ /netscape/i) {
					print "$remote_host: Netscape mail sunucusu, test edilmedi.<BR>\n";
					goto SKIP;
				}
			}
			$myhost=`hostname`;
			chop ($myhost);
			print S "helo $myhost\n";
	
			$line=<S>;
			if (!($line =~ /^250/s)) {
				print "$remote_host: 'helo' mesaji kabul edilmedi - $line<BR>\n";
				goto SKIP;
			}
	
			print S "mail from: ilker\@marketweb.net.tr\n";
			$line=<S>;
			if (!($line =~ /^250/s)) {
				print "$remote_host: 'gonderici' kabul edilmedi'<BR>\n";
				goto SKIP;
			}
			print S "rcpt to: relaycheck\@fidan.net\n";
			$line=<S>;
			if ($line =~ /^250/s) {
				print "relay'e acik: $remote_host<BR>\n";
			}
			else {
				print "relay'e kapali: $remote_host<BR>\n";
			}
			print S "quit\n";
			SKIP:
		}
	}
	SKIP2:
	shift (@PARAM);
}

#print "<BR><H5><A HREF=http://ilker.marketweb.net.tr>Ilker TEMIR</A> (<A
HREF=mailto:ilker\@marketweb.net.tr>ilker\@marketweb.net.tr</A>)\n";
print "<BR><H5>SPAM hakkinda daha fazla bilgi icin : <A
HREF=http://anti-spam.ku.edu.tr>http://anti-spam.ku.edu.tr</A>\n";

