PHP实现的一个简单的在线端口扫描器程序

  前言

  PHP是一种功能强大的Web开发语言。开发效率高,语法简单,为动态网站量身定做,加强面向对象(向C++靠拢,与JAVA搭了点边),可惜单线程(这是至命弱点,据说PHP是用C\C++编写的。),也能用C、C++、JAVA开发中间层,调用COM,服务器维护难度小,故障少。

  既然是为动态网站量身定做,所以注定不能开发出X-scan这样的超强扫描器,不过如果要实现一些简单的功能,还是绰绰有余的。

  端口扫描是我们最常用的踩点手段。如果在网吧这种地方,下载一个专门的扫描器又比较麻烦,如果利用现有的Web服务提供的端口扫描。那可真的是省了不少事。

  下面我们就看看我写的这个PHP端口扫描器的源代码:

<?php

//Codz by angel
//Welcome to My Website
//http://www.4ngel.net

$youip=$HTTP_SERVER_VARS["REMOTE_ADDR"];        // 获取本机IP地址
$remoteip=$HTTP_POST_VARS['remoteip'];            // 获取表单提交的IP地址
?>
<html>
<head>
<title>安全天使——端口在线检测</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style TYPE="text/css">
<!--
BODY {   FONT-SIZE: 12px; FONT-FAMILY: Verdana;color:#000000;
}
TD {
    FONT-SIZE: 12px;
    FONT-FAMILY: Verdana;
    color:#000000;
    line-height: 14px;
}
.style1 {color: #FFFFFF}
-->
</style>
</head>
<body>
<center>
<?php
if (!empty($remoteip)){
// 如果表单不为空就进入IP地址格式的判断

function err() {
        die("对不起,该IP地址不合法<p><a href=javascript:history.back(1)>点击这里返回</a>");
}
// 定义提交错误IP的提示信息

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

if (intval($ips[0])<1 or intval($ips[0])>255 or intval($ips[3])<1 or intval($ips[3]>255)) err();
// 如果第一段和最后一段IP的数字小于1或者大于255,则提示出错

if (intval($ips[1])<0 or intval($ips[1])>255 or intval($ips[2])<0 or intval($ips[2]>255)) err();
// 如果第二段和第三段IP的数字小于0或者大于255,则提示出错

$closed='此端口目前处于关闭状态。';
$opened='<font color=red>此端口目前处于打开状态!</font>';
$close="关闭";
$open="<font color=red>打开</font>";
$port=array(21,23,25,79,80,110,135,137,138,139,143,443,445,1433,3306,3389);
$msg=array(
'Ftp',
'Telnet',
'Smtp',
'Finger',
'Http',
'Pop3',
'Location Service',
'Netbios-NS',
'Netbios-DGM',
'Netbios-SSN',
'IMAP',
'Https',
'Microsoft-DS',
'MSSQL',
'MYSQL',
'Terminal Services'
);    
// 通过IP格式的检查后用数组定义各端口对应的服务名称及状态

echo "<table  border=0 cellpadding=15 cellspacing=0>\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=5 cellspacing=1 bgcolor=#636194>\n";
echo "<tr bgcolor=#7371A5 align=center>\n";
echo "<td><span class=style1>端口</span></td>\n";
echo "<td><span class=style1>服务</span></td>\n";
echo "<td><span class=style1>检测结果</span></td>\n";
echo "<td><span class=style1>描述</span></td>\n";
echo "</tr>\n";
// 输出显示的表格

for($i=0;$i<sizeof($port);$i++)
{
$fp = @fsockopen($remoteip, $port[$i], &$errno, &$errstr, 1);
  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=#F4F7F9><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=4 align=center>\n";
echo "<a href=portscan.php><font color=#FFFFFF>继续扫描>>></font></a></td>\n";
echo "</tr\n";
echo "</table>\n";
echo "<TABLE cellSpacing=0 cellPadding=10 width=100% border=0>\n";
echo "<TR>\n";
echo "<TD align=center><b>Copyright 2004 Security Angel Team[S4T] 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=0 cellpadding=15 cellspacing=0>\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=portscan.php>\n";
echo "<tr><td>\n";
echo "<input type=text name=remoteip size=12>\n";
echo "<input type=submit value=扫描 name=scan>\n";
echo "</td></tr>\n";
echo "</form>";
echo "</table>\n";
// 如果表单为空则显示提交IP地址的表单

?>

<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
  <TR>
     <TD align=center><b>Copyright 2004 Security Angel Team[S4T] All Rights Reserved.</b></TD>
  </TR>
</TABLE>
</center>
</body>
</html>

  后记

  这个扫描器很简单。就是用了一个数组来定义端口的相关信息,原理就是用fsockopen函数连接,如果可以连接,就表示端口打开,否则就是关闭。

  最大的缺点就是PHP是单线程的,所以速度会很慢,这个是用方便、简单作为代价的,其实写这个代码的就是想告诉大家,PHP并不仅仅用于动态网站的开发,也可以用于网络安全领域,往往太注意事物的本职工作,就会忽略其他方面的特点。

时间: 2024-10-03 12:41:57

PHP实现的一个简单的在线端口扫描器程序的相关文章

想用mvc5做一个简单的在线考试系统,求大神指点

问题描述 想用mvc5做一个简单的在线考试系统,求大神指点!!!!留下qq或者其他,详聊 解决方案 解决方案二:http://test.icesoft.cc我刚搞完的,看合不合口味,结贴给源代码解决方案三:引用1楼Acyk的回复: http://test.icesoft.cc我刚搞完的,看合不合口味,结贴给源代码 晕!难道不能输出为一张完整的试卷吗?为什么一题一屏幕,而且还不断刷新页面呢?解决方案四:引用楼主qq_24733397的回复: 想用mvc5做一个简单的在线考试系统,求大神指点!!!!

《UNIX网络编程 卷1:套接字联网API(第3版)》——1.5 一个简单的时间获取服务器程序

1.5 一个简单的时间获取服务器程序 我们可以编写一个简单的TCP时间获取服务器程序,它和1.2节中的客户程序一道工作.图1-9给出了这个服务器程序,它使用了上一节中讲过的包裹函数. 创建TCP套接字10 TCP套接字的创建与客户程序相同. 把服务器的众所周知端口捆绑到套接字11~15 通过填写一个网际套接字地址结构并调用bind函数,服务器的众所周知端口(对于时间获取服务是13)被捆绑到所创建的套接字.我们指定IP地址为INADDR_ANY,这样要是服务器主机有多个网络接口,服务器进程就可以在

使用C# Builder创建一个简单的ASP.NET应用程序

一般网站建设通常要求开发人员做后台的程序设计,前面有专业的美工做界面设计.虽然有时候开发人员也会做些界面设计,但是通常都无法达到专业的要求.在以前的ASP中,由于代码和HTML页面语言混杂在一起,这就使得网站的建设变得相当的困难.但在ASP.NET中,这种情况完全改变了.下面就用C# Builder创建一个简单的ASP.NET应用程序. 打开C# Builder,选择 File>New>other-菜单项,你将会看到下面的窗口: 我们选择C# ASP Projects,你就会看到右边有3种可供

mfc c++-新人求教,我用mfc做了一个tcp fin的端口扫描器,死后得不出结果,求大神帮忙找出问题

问题描述 新人求教,我用mfc做了一个tcp fin的端口扫描器,死后得不出结果,求大神帮忙找出问题 cpp文件 // scanDlg.cpp : implementation file// #include ""stdafx.h""#include ""scan.h""#include ""scanDlg.h""#include ""afxdialogex.h&qu

数据结构-设计一个简单的英文关键词提取程序

问题描述 设计一个简单的英文关键词提取程序 设计一个简单的英文关键词提取程序,可实现对一段英文短文中出现的频率最高的三个到五个词或短语进行提取.要求:1. 从文件中读取一篇英文短文(300词以内),并显示在屏幕上.2. 按照出现频率顺序显示三个到五个词语,并注明出现的次数 解决方案 你把这里当成可以免费帮你写作业的地方么 解决方案二: 如果按你的要求,则可以统计所有单词出现的频率,看那个出现的次数最多,就是你想要的结果. 解决方案三: string[] 数据 = { ""zero&qu

界面-基于WinPcap,编写一个简单的数据包捕获程序

问题描述 基于WinPcap,编写一个简单的数据包捕获程序 * 功能要求: 1) 要求提供图形界面(类似Wireshark),可以捕获网络数据包:提供包过滤功能,可以输入过滤表达式:可以指定时段抓包:显示指定数据包的内容: 2) 提供网络数据包统计功能:提供输入IP地址,向指定IP地址发送数据包 3) 提供数据转储功能,将捕获到的数据包存储到磁盘文件,并可以读取转储的文件 4) 界面美观.大方 解决方案 一个简单的摄像头视频浏览和捕获的程序(转载)WinPcap捕获数据包 解决方案二: ** 看

BtBatStat 0.4发布 一个简单的OS X应用程序

BtBatStat是一个简单的OS X应用程序,显示您的苹果蓝牙鼠标和键盘在菜单栏中的电池状态.它支持苹果BT键盘,苹果Mighty鼠标,和苹果魔术鼠标.其他设备也可以工作. BtBatStat 0.4该版本现在同时支持触控板+鼠标. 下载地址:http://code.google.com/p/btbatstat/downloads/detail?name=BtBatStat-0.4.zip

密码学-求一个简单ElGamal数字签名,控制台程序代码就行

问题描述 求一个简单ElGamal数字签名,控制台程序代码就行 求一个简单ElGamal数字签名,C或C++控制台程序代码就行, rsa数字签名也有的更好,谢谢大神,让我应付下密码学的算法设计. 解决方案 http://www.pudn.com/downloads113/sourcecode/crypt/detail472998.htmlhttp://www.codesoso.net/Record/122168_115197_1.htmlhttp://download.csdn.net/down

【求助】如果要编写一个简单的SQL漏洞注入程序,需要学习哪方面的知识?

问题描述 我想学习编写一个简单的SQL漏洞注入程序,可惜完全没头绪,希望高手能指点迷津,最好能介绍点相关资料,语言也推荐下