如何使用 php 和 shell 脚本捕获和提供 telnet?

2024-03-06

这就是我想使用 php 完成的任务(可能使用 excel()?):

  1. 使用名为 proxychains 的程序远程登录到 whois 注册商:

    proxychains telent whois.someregistrar 43

  2. 如果失败 -> 重试 1

  3. 将域名提供给连接:

    某个域名.com

  4. 捕获注册商返回给php的数据

我没有 shell 脚本编写经验,所以如何捕获事件 其中 telnet 连接并挂起等待输入,我如何“馈送”它?

我完全离开这里还是这是正确的方法?

编辑:我发现 python 有一个很好的方法来处理这个问题expect http://www.noah.org/wiki/pexpect


这是一个基本的工作示例。

<?php

$whois   = 'whois.isoc.org.il';            // server to connect to for whois
$data    = 'drew.co.il';                   // query to send to whois server
$errFile = '/tmp/error-output.txt';        // where stderr gets written to
$command = "proxychains telnet $whois 43"; // command to run for making query

// variables to pass to proc_open
$cwd            = '/tmp';
$env            = null;
$descriptorspec = array(
        0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
        1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
        2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);

// process output goes here
$output  = '';

// store return value on failure
$return_value = null;

// open the process
$process = proc_open($command, $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {
    echo "Opened process...\n";

    $readBuf = '';

    // infinite loop until process returns
    for(;;) {
        usleep(100000); // dont consume too many resources

        // TODO: implement a timeout

        $stat = proc_get_status($process); // get info on process

        if ($stat['running']) { // still running
            $read = fread($pipes[1], 4096);
            if ($read) {
                $readBuf .= $read;
            }

            // read output to determine if telnet connected successfully
            if (strpos($readBuf, "Connected to $whois") !== false) {
                // write our query to process and append newline to initiate
                fwrite($pipes[0], $data . "\n");

                // read the output of the process
                $output = stream_get_contents($pipes[1]);
                break;
            }
        } else {
            // process finished before we could do anything
            $output       = stream_get_contents($pipes[1]); // get output of command
            $return_value = $stat['exitcode']; // set exit code
            break;
        }
    }

    echo "Execution completed.\n";

    if ($return_value != null) {
        var_dump($return_value, file_get_contents($errFile));
    } else {
        var_dump($output);
    }

    // close pipes
    fclose($pipes[1]);
    fclose($pipes[0]);

    // close process
    proc_close($process);
} else {
    echo 'Failed to open process.';
}

这应该从命令行运行,但并非必须如此。我试图很好地评论它。基本上一开始你就可以设置whois服务器和要查询的域。

该脚本使用进程打开 http://php.net/proc_open开一个proxychains调用 telnet 的进程。它检查进程是否已成功打开,如果是,则检查其状态是否正在运行。在运行时,它将 telnet 的输出读取到缓冲区中,并查找字符串 telnet 输出以指示我们已连接。

一旦检测到 telnet 连接,它就会将数据写入进程,后跟换行符 (\n),然后从 telnet 数据所在的管道中读取数据。一旦发生这种情况,它就会跳出循环并关闭进程和句柄。

您可以从指定的文件中查看 proxychains 的输出$errFile。其中包含连接信息以及连接失败时的调试信息。

可能需要进行一些额外的错误检查或流程管理以使其更加健壮,但是如果将其放入函数中,您应该能够轻松调用它并检查返回值以查看查询是否成功。

希望这能为您提供一个良好的起点。

另请查看我的这个答案,了解另一个工作示例proc_open,此示例实现了超时检查,因此如果命令在一定时间内未完成,您可以退出:在 Linux 上创建 PHP 在线评分系统:exec 行为、进程 ID 和 grep https://stackoverflow.com/questions/9356250/creating-a-php-online-grading-system-on-linux-exec-behavior-process-ids-and-g/9357331#9357331

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 php 和 shell 脚本捕获和提供 telnet? 的相关文章

  • 是否存在类似于适用于 Ruby 的 ActiveMerchant 的 PHP 项目?

    我很好奇是否有人知道 ActiveMerchant 中存在的具有类似通用支付处理器功能的 PHP 功能 如果您正在寻找类似 PHP 中的 Active Merchant 的内容 请检查this http github com akDevel
  • 在php中设置数据库中的会话

    如何使用 php 和 mysql 在数据库表中使用会话 您需要创建一个像这样的对象 class SessionHandler private static lifetime 0 private function construct obje
  • 如何从循环内的字符串中删除最后一个字符

    我正在尝试在 xml 中的一行中打印所选的不同类别 喜欢
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • 通过 exec() 的 Crontab 不适用于 PHP 7.4 / Deb 10

    调试有点困难 因为我正在使用新版本的 PHP 和新服务器上的新操作系统 我有一个 PHP 的 cron 管理系统 它也允许我添加 删除或启用 禁用 cronjobs 在另一台当前使用 PHP 7 2 的 Deb 8 服务器上 它可以使用以下
  • 从 PHP 使用 linux 'dialog' 命令

    我正在尝试编写一个帮助程序脚本 用于在服务器上执行各种管理任务 这些任务只能从命令行完成 并尝试使用 dialog 命令来显示消息框 输入 密码提示等 但是 需要这项任务要求我用 PHP 处理数据 我在让对话框命令以这种方式工作时遇到问题
  • Doctrine2 与条件的关联映射

    是否可以与教义 2 4 中的条件进行关联映射 我有实体文章和评论 评论需要管理员批准 评论的批准状态存储在布尔字段 approved 中 现在我有 OneToMany 关联映射到实体文章中的评论 它映射了所有评论 但我只想映射批准的评论 就
  • Bash + sed/awk/cut 删除第 n 个字符

    我试图删除每行的第 6 7 和第 8 个字符 下面是包含文本格式的文件 实际输出 cat test 18 40 12 172 16 70 217 UP 18 42 15 172 16 70 218 DOWN 格式化后如下所示 cat tes
  • 将优惠券百分比添加到 WooCommerce 中的购物车页面

    我试图在购物车页面中显示优惠券百分比 但收到几个错误 这是我的自定义代码 Add Coupon Percentage to Cart function my coupon percentage cart value coupon if co
  • Yii urlManager URL 中的语言

    我正在尝试使用以下语法向 url 添加语言 http www example com en site page view about http www example com en site page view about 到目前为止 我所
  • 递归树遍历 - 如何跟踪递归级别?

    我基本上试图从表示树结构的多维数组构建 html ul li 嵌套列表 下面的代码工作正常 但我想改进它 我需要一种方法来跟踪递归级别 以便我可以将不同的类应用于不同的级别 向生成的输出添加缩进等 function buildTree tr
  • Shell Crontab 不工作

    GNU nano 2 0 9 文件 tmp crontab XXXXzBQgwS 5 check phpfpm sh 5 check nginx sh 5 disk clean sh 5 loadcheck sh 按理说我的代码应该每 5
  • 分页当前链接未突出显示

    我遇到了一个奇怪的问题 我当前的分页链接未突出显示 我制作的分页网址如下所示 site com list 50 some value 一切工作正常 但当前视图中的分页链接未突出显示 我检查了CSS 没问题 我猜问题出在库上 这是我的代码 我
  • 为简单应用程序生成 PHAR

    我正在尝试使用 Symfony2 控制台库构建 CLI 工具 我已经有了一些基本的工作 现在我想将其打包为一个 Phar 我读过一些示例 但我看到的示例非常简单 3 个文件 没有命名空间等 In my src 目录我有以下内容 Above
  • 我可以使用 vim “star” 搜索来搜索 PHP 类成员和方法吗?

    vim 星号 星号搜索 help star 是一个很棒的功能 它可以让您找到光标所在单词的下一个出现位置 不幸的是 它将美元前缀视为字符串的一部分 因此如果我在类名中的 SearchTerm 上方按 它会在注释中找到 SearchTerm
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • 如何从一行获取数据并移动到模态?拉拉维尔 5.4

    我有一个表 其中列出了数据库中的产品 其中包含 ID 名称 描述以及其他数据类型 我创建了一个按钮 该按钮将调用模态来显示有关产品的更多详细信息 但是模态始终显示表中第一个产品的详细信息 而不是与其相关的 ID 我的桌子 我的表代码 tab
  • 在 Angular 6 中添加 Xsrf-Token 时出现问题

    通过 API 提交的表单中的数据已成功发布 但是将 X CSRF TOKEN 添加到标头并设置后withCredentials true结果数据未发布到名为的脚本insert php Error 加载失败http localhost sim
  • 使用 PHP MySql 进行关键字搜索?

    我的 mysql 表中有标题 varchar 描述 text 关键字 varchar 字段 我保留了关键字字段 因为我认为我只会在这个字段中搜索 但我现在需要在所有三个字段中进行搜索 所以对于关键字 word1 word2 word3 我的
  • npm 运行如何工作?

    当我打字时会发生什么npm run

随机推荐

  • 在 C++ 中传递对象所有权

    表明一个对象想要获得另一个对象的所有权的最佳方式是什么 到目前为止 我一直在使用std auto ptr在公共接口中 因此客户端知道该接口想要获取所传递对象的所有权 然而 最新的 GCC 告诉我auto ptr已弃用 所以我想知道推荐什么
  • 如何使用 VisPy 库实时绘图?

    我编写了一个脚本来模拟流行病的演变 使用图表和散点图 我尝试了几个库来实时显示结果 8 个国家 x 500 个粒子 Matplotlib 不够快 PyQtGraph 更好但仍然不够快 OpenGL 很好 但我没有找到如何在 2D 中有效地使
  • 如何在屏幕旋转时保持recyclerView的滚动位置

    我正在使用 gridlayoutManager 填充 recyclerView 现在我想保存屏幕旋转的滚动位置 我尝试使用 onSaveInstanceState 和 onRestoreInstanceState 来执行此操作 如本文所示
  • WPF DataGrid - 如何在按下 Tab 键后将键盘焦点移动到新添加的行

    如果我们在最后一行的最后一列上按 Tab 键 WPF DataGrid 将添加一个新行 但添加新行后 焦点将移至网格的顶行 我们如何确保焦点移动到新行的第一列 你可以尝试类似的东西 this SelectRowCell this Items
  • php“curl”不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 从 Excel 工作簿 VSTO 调用 Excel 加载项函数

    我想在 Excel Add In 2007 解决方案中创建一个方法 可以从我的 Excel Workbook 2007 解决方案中调用该方法 我解释一下 我想从Excel工作簿2007解决方案的代码隐藏文件中调用Excel加载项的方法 我不
  • 读取大型制表符分隔文件分块时出现异常

    我有一个 350MB 制表符分隔的文本文件 如果我尝试将其读入内存 则会出现内存不足异常 所以我正在尝试一些类似的事情 即只阅读几列 import pandas as pd input file and path r C Christian
  • Python 256位哈希函数,带数字输出

    我需要一个具有 256 位输出 如 long int 的哈希函数 首先 我认为我可以使用 hashlib 中的 SHA256 但它有一个字符串输出 我需要一个数字来计算 将 32 字节字符串转换为 long 也可以 但我没有找到任何东西 在
  • 快速文件复制并取得进展

    我正在为 Linux 编写一个 SDL 应用程序 它可以从控制台运行 无 X 服务器 我拥有的一个功能是文件复制机制 它将特定文件从 HDD 复制到 USB 闪存设备 并在 UI 中显示此复制的进度 为此 我使用简单的 while 循环并按
  • 当嵌入类型具有 UnmarshalJSON 时,json.Unmarshal 失败

    我正在尝试解组具有嵌入类型的结构 当嵌入类型具有 UnmarshalJSON 方法时 外部类型的解组失败 https play golang org p Y Tt5O8A1Q https play golang org p Y Tt5O8A
  • 编辑pip安装的包

    我正在尝试编辑通过 pip 安装的一个名为 py mysql2pgsql 的包 将数据库从 mysql 转换为 postgre 时出现错误 就像this https stackoverflow com questions 26008398
  • 保留 string_agg 内部的不同顺序

    Mysql函数 with recursive locpais as select l id l nome l tipo tid lp pai from loc l left join locpai lp on lp loc l id whe
  • 根据类别对表列的所有值求和

    我正在尝试根据特定类检索 td 中所有值的总和 该代码不会抛出任何错误 但我的总和始终为 0 数值是否必须以特定方式指定 我在这里看到了一些其他答案 从哪里模仿了代码 我没有看到我的和他们的有任何真正的区别 所以我很困惑为什么我的不起作用
  • 如何等待ShellExecute运行?

    我设法在 VC 中使用 ShellExecute 来启动文档 现在我希望运行一个接收一些参数的命令行工具 并在后台运行 隐藏 而不是最小化 并让它阻止我的程序流程 以便我能够等待它完成 如何更改命令行 ShellExecute NULL o
  • 如何设置xAxis标签之间的间距

    我遇到了图表显示的问题 你可以从图片中看到它 旧版本的图表有apispaceBetweenLabels设置标签之间的间距 我只找到apispaceMax and spaceMin在最新版本中 我尝试使用它们来设置标签之间的空间 但失败了 我
  • NLTK Python 中的词义消歧

    我是 NLTK Python 的新手 我正在寻找一些可以进行词义消歧的示例应用程序 我在搜索结果中有很多算法 但没有示例应用程序 我只是想传递一句话 并想通过参考wordnet库来了解每个单词的含义 谢谢 我在 PERL 中找到了类似的模块
  • 为 Node / MongoDB 应用程序播种的最佳方法是什么?

    所以 我是 MEAN 堆栈的新手 在尝试为 MongoDB 播种时遇到了困难 我正在使用 Mongoose 与数据库进行通信 并且有大量文档表明我应该能够使用填充的 JSON 文件进行播种 我尝试过的 节点 mongo 种子 https w
  • 不使用 oledb 将 Excel 工作表数据导入到 datagrid

    在我的基于 Windows 的应用程序中 C 我想导入 Excel 工作表以在 DatatGridView 中显示其数据 我不想使用 oledb any Help using Excel Microsoft Office Interop E
  • 为什么 gets() 被弃用? [复制]

    这个问题在这里已经有答案了 使用时gets 在我的代码中 编译器大喊 warning the gets function is dangerous and should not be used and warning gets is dep
  • 如何使用 php 和 shell 脚本捕获和提供 telnet?

    这就是我想使用 php 完成的任务 可能使用 excel 使用名为 proxychains 的程序远程登录到 whois 注册商 proxychains telent whois someregistrar 43 如果失败 gt 重试 1