草庐IT

PHP端口扫描

coder 2024-04-20 原文

这可能是重复的帖子,但我还没有看到任何正确解决此问题的答案。

我正在尝试找到一个可以正确确定 TCP 或 UDP 端口状态的 php 脚本。

我已经尝试了几个我在网上找到的方法,但它们都返回了错误的结果。 EG:在我的本地网络上,我打开了端口 5000 UDP 和 5060 TCP/UDP,并且路由正确。

如果我通过 http://www.ipfingerprints.com/portscan.php 运行测试或 GRC Shields Up 然后返回正确的结果,但我尝试过的所有 PHP 脚本都失败并显示端口已关闭。

我正在通过我的托管帐户运行 php 脚本,并尝试扫描和测试我自己的网络。

这是我试过的脚本之一:

    <html>
<head>
<?php echo "<title>Port Scanning " . $_GET['host'] . "</title>"; ?>
</head>
<body>
<?php
ini_set('display_errors', 0);

if(isset($_GET['host']) == true) 
    $host = $_GET['host'];
else
{
    echo "You didn't set the host parameter";
    die();
}

if(isset($_GET['sport']) == true) 
    $sport = $_GET['sport'];
else
{
    echo "You didn't set the sport parameter";
    die();
}

if(isset($_GET['eport']) == true) 
    $eport = $_GET['eport'];
else
{
    echo "You didn't set the eport parameter";
    die();
}

if($sport > $eport)
{
    $sport = $eport;
}

$scanned = 0;
$openports = 0;
$maxports = 1;
$totalports = ($eport - $sport) + 1;
$mins = floor(($totalports / 10) / 60);
$secs = ($totalports / 10) - $mins * 60;

echo "<font color=\"blue\">Scanning " . $totalports . " ports on " . $host . ", this should take around " . $mins . " minute(s) and " . $secs . " second(s), probably more depending on local website load, hardware, and other factors.<br/><br/></font>";
flush();

do
{
    if($scanned >= $maxports && $maxports != 0)
    {
        echo "<font color=\"darkgreen\" size=\"4\">Scan limit of " . $maxports . " ports reached, scanning stopped.</font><br/><br/><font color=\"darkred\" size=\"4\">Scanner written by Samo502</font>";
        flush();
        die();
    }
    if(fsockopen($host, $sport, $errorno, $errorstr, 0.1))
    {
        echo "<font color=\"darkgreen\">Port " . $sport . " is open on " . $host . "</font><br/>";
        $openports++;
        flush();
    }
    else
    {
        echo "<font color=\"red\">Port " . $sport . " is not open on " . $host . "</font><br/>";
        flush();
    }
    $scanned++;
    $sport++;
} while($sport <= $eport);

echo "<br/><font color=\"blue\">Done, " . $openports . " out of " . $totalports . " ports are open.</font><br/><br/><br/><font color=\"darkred\" size=\"4\">Scanner written by Samo502</font>";
die();
?>
</body>
</html>

有谁知道正确执行此操作的方法吗?

谢谢

**更新** 我发现这似乎工作得更好一些,但它仍然没有检测到端口 21 当前在我的网络上打开..

http://resources.infosecinstitute.com/php-build-your-own-mini-port-scanner-2/

感谢收到的任何帮助。谢谢

最佳答案

最好的解决方案是用 PHP 为 nmap 编写一个包装器 - 说真的,你无法重新编写比 nmap 更好的端口扫描程序。

如果你真的想这样做,你不应该简单地打开 TCP 端口并检查它是否连接,你应该从较低级别的套接字开始,原始套接字。

$mysocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

这使您可以调查 SYNACK 握手标志并进行隐蔽或更快速的扫描。

您可以并行创建(非阻塞)套接字并使用 socket_select(); 检查它们的缓冲区/连接,这是在 PHP 中处理多个套接字的最快和最可靠的方法。我可能会使用 fork 或线程或分派(dispatch)部分代码来在单个端口扫描的同时运行完整的端口扫描。

您想要使用的其他函数是 socket_set_timeout()socket_set_blocking()

shell_exec not working with nmap command

https://unix.stackexchange.com/questions/28732/fastest-way-to-port-scan-nmap

http://phpnmap.sourceforge.net/

可能是最好的解决方案,一个 PEAR 包 nmap 包装器:http://pear.php.net/package/Net_Nmap/

关于PHP端口扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279991/

有关PHP端口扫描的更多相关文章

  1. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  2. Ruby 扫描/获取直到 EOF - 2

    我想扫描未知数量的行,直到扫描完所有行。我如何在ruby中做到这一点?例如:putreturnsbetweenparagraphsforlinebreakadd2spacesatend_italic_or**bold**输入不是来自"file",而是通过STDIN。 最佳答案 在ruby​​中有很多方法可以做到这一点。大多数情况下,您希望一次处理一行,例如,您可以使用whileline=getsend或STDIN.each_linedo|line|end或者通过使用-n开关运行ruby​​,例如,这意味着上述循环之一(在每次迭代中将

  3. ruby-on-rails - Rails/Heroku - 如何对上传的文件进行反病毒扫描? - 2

    如何扫描上传文件中的病毒、木马等?只是想阻止一些用户上传一些讨厌的东西。我正在使用Heroku和AmazonS3。 最佳答案 Checkoutthis它支持REST/JSON防病毒网络服务。 关于ruby-on-rails-Rails/Heroku-如何对上传的文件进行反病毒扫描?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9640516/

  4. ruby - Chromedriver Devtools 端口号错误 - 2

    尝试使用capybara、selenium和chromedriver-helper运行测试时出现以下错误。使用相同版本的chromedriver,测试在mac上本地运行良好。我已经尝试在我的spec_helper中明确设置远程调试端口,但显然这被忽略了,因为chromedriver使用随机远程调试端口。Selenium::WebDriver::Error::UnknownError:unknownerror:Devtoolsportnumberfilecontentswereinanunexpectedformat(Driverinfo:chromedriver=2.40.565383

  5. ruby - 如何在 HTTParty 中设置端口 - 2

    我读到HTTParty使用SSLiftheportissetto443,但我不知道如何设置端口。有人可以为我澄清一下吗? 最佳答案 检查规范:https://github.com/jnunemaker/httparty/blob/82a90c1b93b076f9d2d7410123c2b5d609401a1f/spec/httparty/request_spec.rb#L41目标URL预计使用端口443。只需在目标URI末尾添加:443就足以使HTTParty使用SSL。顺便说一下,HTTPSURL也将使用SSL。例子:http:/

  6. Ruby NET::SCP 和自定义端口 - 2

    我正在尝试使用Net::SCP为ssh连接定义一个自定义端口,但到目前为止运气不佳。下面是我如何尝试使用自定义ssh端口从服务器下载远程文件的示例:require"rubygems"require'net/scp'Net::SCP.download!("www.server.com","user","/opt/platform/upload/projects/file.txt","/tmp/bb.pdf",{:password=>"mypassword",:port=>22202})我得到的错误信息是:Errno::ECONNREFUSED:Connectionrefused-conn

  7. ruby 正则表达式扫描与 =~ - 2

    Ruby(1.9.3)文档似乎暗示scan等同于=~除了scan返回多个匹配项,而=~仅返回第一个匹配项,并且scan返回匹配数据,而=~返回索引。但是,在下面的示例中,这两种方法似乎对相同的字符串和表达式返回不同的结果。这是为什么?1.9.3p0:002>str="PerlandPython-thetwolanguages"=>"PerlandPython-thetwolanguages"1.9.3p0:008>exp=/P(erl|ython)/=>/P(erl|ython)/1.9.3p0:009>str=~exp=>01.9.3p0:010>str.scanexp=>[["er

  8. ruby - Openshift 端口转发 - 2

    关于它的话题已经很多了。但是我卡住了我成功配置了ssh!现在我想为与TOAD的连接配置端口转发。我用过这个图:https://blog.openshift.com/getting-started-with-port-forwarding-on-openshift/现在当我尝试rhcport-forward-aphp我收到此错误无法解析PKey:没有起始行我创立了这个:http://blog.skypayjm.com/2015/02/accessing-remote-openshifts-database.html我尝试降级ssh,但没有任何改变。有人知道我做错了什么吗?此致,布莱希特

  9. 华为静态NAT、动态NAT、PAT端口复用 - 2

    一、网络环境及TOP1.1R1相当于内网的一台PC, IP:192.168.1.10 网关为 192.168.1.254[R1]iproute-static0.0.0.00192.168.1.254#R1配置默认路由(网关)1.2R2为出口路由器,分别连接内网R1及外网R31)R2 内网接口IP:192.168.1.2542)R2外网接口IP:100.1.1.102)R2NAT地址为:100.1.1.11-100.1.1.14二、静态NAT配置1.1静态NAT(一对一双向)R2配置静态NAT,将公网IP100.1.1.11映射到内网R1 192.168.1.10[R2]intg0/0/1[R2

  10. 信息收集(Web目录扫描) - 2

    一、扫描原因        (1)寻找到网站后台管理        (2)寻找未授权界面        (3)寻找网站更多隐藏信息        (4)通过使用目录扫描可以让我们发现这个网站存在多少个目录,多少个页面,探索出网站的整体结构。通过目录扫描我们还能扫描敏感文件,后台文件,数据库文件,和信息泄漏文件等等。二、方法1、robots.txt        (1)Robots协议(RobotsExclusionProtocol)“网络爬虫排除标准”,网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。        (2)同时也记录网站所具有基本的目录。        

随机推荐