一个用于网络的工具函数库


// whois(hostname [,username, [port]])
Function whois ($a_server$a_query=""$a_port=43) {
$sock fsockopen($a_server$a_port, &$errno, &$errstr10);
if (!
$sock)
{
echo 
"$errstr ($errno)<BR>n";
} else {
fputs($sock"$a_queryrn");
while(!
feof($sock))
{
$buf fgets($sock,128);
if (
ereg"Whois Server:"$buf))
{
$a_server str_replace"Whois Server: """$buf);
$a_server trim($a_server);
}
}
fclose($sock);

if (
$a_server)
{
print 
"<B>$a_query is registered at $a_server:</B><BR>";
$sock fsockopen($a_server43, &$errno, &$errstr10);
if(!
$sock)
{
echo 
"Could not open connection to $a_server on port $a_port.n";
echo 
"$errstr ($errno)<BR>n";
} else {
fputs($sock"$a_queryrn");
while(!
feof($sock))
{
echo 
fgets($sock,128);
}
fclose($sock);
}
} else {
echo 
"<b>$a_query was not found.</b><BR>";
}
}
}


// finger(hostname [,username, [port]])
Function finger ($a_server$a_query=""$a_port=79) {
$sock=fsockopen($a_server,$a_port, &$errno, &$errstr10);
if (!
$sock)
{
$ret_str "$errstr ($errno)<BR>n";
} else {
fputs($sock,"$a_queryn");
while (!
feof($sock)) { $ret_str .= fgets($sock,128); }
fclose($sock);
}
echo 
$ret_str;
return 
$ret_str;
}


// traceroute(hostname)
Function traceroute ($a_query) {
exec("traceroute $a_query",$ret_strs);
$str_count count($ret_strs);
for (
$count=0$count $str_count$count++)
print 
"$count/$str_count".$ret_strs[$count]."n";
}


// -----------------------------------------------------------


$app_name "PHP Net Toolpack";
$app_version "0.1";

$TOOLS = array(
"finger" => "Finger",
"traceroute" => "Traceroute",
"whois" => "Whois?"
);

// when included inside <select name="tool"> on a html file ..
if ($tool=="listtools")
{
while (list(
$key$val) = each($TOOLS)) {
print 
" <OPTION VALUE="".$key."">".$val."</OPTION>n";
}
exit;
}

// print appropriate html header
print "<HTML>";
if (
$tool)
{
print 
"<HEAD><TITLE>".$tool." for ".$query."</TITLE></HEAD>n";
print 
"<BODY>n<H3>".$tool." for ".$query." ..</H3>n";
} else {
print 
"<HEAD><TITLE>".$app_name."</TITLE></HEAD>n";
print 
"<BODY>n<H3>".$app_name."</H3>n";
}

// check what tool they want to use and do what is necessary
switch($tool) {
case 
"finger":
if (
$query)
{
print 
"<PRE>n";
finger($server$query);
print 
"</PRE>";
} else {
?>

<FORM ACTION="<?PHP echo($PHP_SELF"?tool=".$tool); ?>" METHOD="post">
Server : <INPUT TYPE="text" NAME="server" VALUE="localhost"> <BR>
Query : <INPUT TYPE="text" NAME="query" SIZE="40" MAXLENGTH="100"> <BR>
<INPUT TYPE="submit" VALUE="Finger">
</FORM>

<?PHP
}
break;

case 
"traceroute":
if (
$query)
{
print 
"<PRE>n";
traceroute($query);
print 
"</PRE>";
} else {
?>

<FORM ACTION="<?PHP echo($PHP_SELF"?tool=".$tool); ?>" METHOD="post">
Query : <INPUT TYPE="text" NAME="query" SIZE="40" MAXLENGTH="100"> <BR>
<INPUT TYPE="submit" VALUE="Trace route">
</FORM>

<?PHP
}
break;


case 
"whois":
if (
$query)
{
print 
"<PRE>n";
whois($server,$query);
print 
"</PRE>";
} else {
?> 

<!-- <UL>
To look up a NIC handle, host name, or registrant,
use one of the keywords below:<BR>
<LI>To search by NIC handle (or contact), type "handle WA3509"</LI><BR>
<LI>To search by name, type "name lastname, firstname" </LI><BR>
<LI>To search by company name, type "name The Sample Corporation" </LI><BR>
<LI>To search by domain name, type "example.com" </LI><BR>
<LI>To search by IP address, type "host 121.23.2.7" </LI><BR>
<LI>To search by host or nameserver name, type "host ns1.worldnic.com" </LI><BR>
(examples are from networksolutions.com)
</UL> -->

<FORM ACTION="<?PHP echo($PHP_SELF"?tool=".$tool); ?>" METHOD="post">
This will find .com, .org, and .net domains<BR>
Server : <INPUT TYPE="text" NAME="server" VALUE="rs.internic.net"> <BR>
Query : <INPUT TYPE="text" NAME="query" SIZE="40" MAXLENGTH="100"> <BR>
<INPUT TYPE="submit" VALUE="<?PHP echo $TOOLS[$tool]; ?>">
</FORM>

<?PHP
}
break;

default:
print 
"<UL>Currently supported tools are:n";
while (list(
$key$val) = each($TOOLS)) {
echo 
"<LI><A HREF="".$PHP_SELF."?tool=".$key."">".$val."</A></LI>n";
}
print 
"</UL>n";
break;
}

print 
"n<HR><SMALL>".$app_name." v".$app_version."</SMALL>n";
print 
"<BODY>n</HTML>";

?>