熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

一個簡單的php在線端口掃描器

2013-11-15 12:25:55  來源: PHP編程 

  PHP是一種功能強大的Web開發語言開發效率高語法簡單為動態網站量身定做加強面向對象(向C++靠攏與JAVA搭了點邊)可惜單線程(這是至命弱點據說PHP是用CC++編寫的也能用CC++JAVA開發中間層調用COM服務器維護難度小故障少

  既然是為動態網站量身定做所以注定不能開發出Xscan這樣的超強掃描器不過如果要實現一些簡單的功能還是綽綽有余的

  端口掃描是我們最常用的踩點手段如果在網吧這種地方下載一個專門的掃描器又比較麻煩如果利用現有的Web服務提供的端口掃描那可真的是省了不少事

  下面我們就看看我寫的這個PHP端口掃描器的源代碼
 

  代碼:

  <?php

//Codz by angel

$youip=$HTTP_SERVER_VARS["REMOTE_ADDR"];        // 獲取本機IP地址
$remoteip=$HTTP_POST_VARS[remoteip];            // 獲取表單提交的IP地址
?>
<html>
<head>
<title>安全天使――端口在線檢測</title>
<meta httpequiv="ContentType" content="text/html; charset=gb">
<style TYPE="text/css">
<!
BODY {   FONTSIZE: px; FONTFAMILY: Verdana;color:#;
}
TD {
    FONTSIZE: px;
    FONTFAMILY: Verdana;
    color:#;
    lineheight: px;
}
style {color: #FFFFFF}
>
</style>
</head>
<body>
<center>
<?php
if (!empty($remoteip)){
// 如果表單不為空就進入IP地址格式的判斷

function err() {
        die("對不起該IP地址不合法<p><a href=javascript:historyback()>點擊這裡返回</a>");
}
// 定義提交錯誤IP的提示信息

$ips=explode(""$remoteip);
// 用分割IP地址

if (intval($ips[])< or intval($ips[])> or intval($ips[])< or intval($ips[]>)) err();
// 如果第一段和最後一段IP的數字小於或者大於則提示出錯

if (intval($ips[])< or intval($ips[])> or intval($ips[])< or intval($ips[]>)) err();
// 如果第二段和第三段IP的數字小於或者大於則提示出錯

$closed=此端口目前處於關閉狀態;
$opened=<font color=red>此端口目前處於打開狀態!</font>;
$close="關閉";
$open="<font color=red>打開</font>";
$port=array();
$msg=array(
Ftp
Telnet
Smtp
Finger
Http
Pop
Location Service
NetbiosNS
NetbiosDGM
NetbiosSSN
IMAP
Https
MicrosoftDS
MSSQL
MYSQL
Terminal Services
);    
// 通過IP格式的檢查後用數組定義各端口對應的服務名稱及狀態

echo "<table  border= cellpadding= cellspacing=>n";
echo "<tr>n";
echo "<td align=center><strong>您掃描的IP<font
color=red>"$remoteip"</font></strong></td>n";
echo "</tr>n";
echo "</table>n";
echo "<table cellpadding= cellspacing= bgcolor=#>n";
echo "<tr bgcolor=#A align=center>n";
echo "<td><span class=style>端口</span></td>n";
echo "<td><span class=style>服務</span></td>n";
echo "<td><span class=style>檢測結果</span></td>n";
echo "<td><span class=style>描述</span></td>n";
echo "</tr>n";
// 輸出顯示的表格

for($i=;$i<sizeof($port);$i++)
{
$fp = @fsockopen($remoteip $port[$i] &$errno &$errstr );
  if (!$fp) {
     echo "<tr bgcolor=#FFFFFF><td align=center>"$port[$i]"</td><td>"$msg[$i]"</td><td
align=center>"$close"</td><td>"$closed"</td></tr>n";
  } else {
     echo "<tr bgcolor=#FFF><td align=center>"$port[$i]"</td><td>"$msg[$i]"</td><td
align=center>"$open"</td><td>"$opened"</td></tr>";
  }
}
// 用for語句分別用fsockopen函數連接遠程主機的相關端口並輸出結果

echo "<tr><td colspan= align=center>n";
echo "<a href=portscanphp><font color=#FFFFFF>繼續掃描>>></font></a></td>n";
echo "</trn";
echo "</table>n";
echo "<TABLE cellSpacing= cellPadding= width=% border=>n";
echo "<TR>n";
echo "<TD align=center><b>Copyright &copy; Security Angel Team[ST] All Rights Reserved</b></TD>n";
echo "</TR>n";
echo "</TABLE>n";
echo "</center>n";
echo "</body>n";
echo "</html>n";
exit;
}
// 探測結束

echo "<table  border= cellpadding= cellspacing=>n";
echo "<tr>n";
echo "<td align=center><strong>您的IP<font color=red>"$youip"</font></strong></td>n";
echo "</tr>n";
echo "<form method=POST action=portscanphp>n";
echo "<tr><td>n";
echo "<input type=text name=remoteip size=>n";
echo "<input type=submit value=掃描 name=scan>n";
echo "</td></tr>n";
echo "</form>";
echo "</table>n";
// 如果表單為空則顯示提交IP地址的表單

?>

<TABLE cellSpacing= cellPadding= width="%" border=>
  <TR>
     <TD align=center><b>Copyright &copy; Security Angel Team[ST] All Rights Reserved</b></TD>
  </TR>
</TABLE>
</center>
</body>
</html>

  後記

  這個掃描器很簡單就是用了一個數組來定義端口的相關信息原理就是用fsockopen函數連接如果可以連接就表示端口打開否則就是關閉

  最大的缺點就是PHP是單線程的所以速度會很慢這個是用方便簡單作為代價的其實寫這個代碼的就是想告訴大家PHP並不僅僅用於動態網站的開發也可以用於網絡安全領域往往太注意事物的本職工作就會忽略其他方面的特點


From:http://tw.wingwit.com/Article/program/PHP/201311/20943.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.