<?
function size($mask)
{
if($mask == 32)
return(1);
if($mask == 31)
return(2);
$mask = 32 - $mask;
return(pow(2, $mask));
}
function ip($ip)
{
$bits = explode(".", $ip);
$ip = $bits[3] + floor($bits[2] * 256) + floor($bits[1] * 65536) + floor($bits[0] * 16777216);
return($ip);
}
function revip($ip)
{
$ip0 = floor($ip / 16777216);
$ip -= floor($ip / 16777216) * 16777216;
$ip1 = floor($ip / 65536);
$ip -= floor($ip / 65536) * 65536;
$ip2 = floor($ip / 256);
$ip -= floor($ip / 256) * 256;
return("$ip0.$ip1.$ip2.$ip");
}
$net = $argv['1'];
if($net == "")
die("You must supply a valid netmask eg 127.0.0.1/8\n");
list($ip, $mask) = explode("/", $net, 2);
if($mask == "")
$mask = 32;
$start = ip($ip);
$size = size($mask);
for($i = $start; $i < $start + $size; $i++)
{
$ip = revip($i);
$lines = explode("\n", trim(`echo 'QUIT'|timeout 2 openssl s_client -connect '$ip:443' 2>&1`));
$keysize = $host = $cipher = $protocol = $issuer = "";
foreach($lines as $line)
{
$line = trim($line);
if(substr($line, 0, 7) == "issuer=")
$issuer = substr($line, 7);
if(substr($line, 0, 8) == "Protocol")
$protocol = substr($line, 12);
if(substr($line, 0, 6) == "Cipher")
$cipher = substr($line, 12);
if(substr($line, 0, 21) == "Server public key is ")
$keysize = substr($line, 21, -4);
}
if($issuer == "")
continue;
$host = array("ip" => $ip, "issuer" => $issuer, "protocol" => $protocol, "cipher" => $cipher, "keysize" => $keysize);
print_r($host);
}
?>