PHP 脚本到 Traceroute?

2024-03-31

我有一个在 GoDaddy 共享 Linux 服务器上运行 PHP 的网站。我需要确定用户是否连接到公司 VPN。如果我简单地执行 $_SERVER['REMOTE_ADDR'] 它会给我客户端的 IP 地址。但是,如果我可以使用 Tracert 进行更深入的挖掘,第二跳将显示为公司的 IP 地址。

是否可以使用 PHP 从网页执行跟踪路由以确定用户是否连接到公司的分割隧道 VPN?


使用 PHP 创建跟踪路由程序

http://www.adayinthelifeof.nl/2010/07/30/creating-a-traceroute-program-in-php/ http://www.adayinthelifeof.nl/2010/07/30/creating-a-traceroute-program-in-php/

如果网站出现故障,要点如下:

<?php

define ("SOL_IP", 0);
define ("IP_TTL", 2);    // On OSX, use '4' instead of '2'.

$dest_url = "www.google.com";   // Fill in your own URL here, or use $argv[1] to fetch from commandline.
$maximum_hops = 30;
$port = 33434;  // Standard port that traceroute programs use. Could be anything actually.

// Get IP from URL
$dest_addr = gethostbyname ($dest_url);
print "Tracerouting to destination: $dest_addr\n";

$ttl = 1;
while ($ttl < $maximum_hops) {
    // Create ICMP and UDP sockets
    $recv_socket = socket_create (AF_INET, SOCK_RAW, getprotobyname ('icmp'));
    $send_socket = socket_create (AF_INET, SOCK_DGRAM, getprotobyname ('udp'));

    // Set TTL to current lifetime
    socket_set_option ($send_socket, SOL_IP, IP_TTL, $ttl);

    // Bind receiving ICMP socket to default IP (no port needed since it's ICMP)
    socket_bind ($recv_socket, 0, 0);

    // Save the current time for roundtrip calculation
    $t1 = microtime (true);

    // Send a zero sized UDP packet towards the destination
    socket_sendto ($send_socket, "", 0, 0, $dest_addr, $port);

    // Wait for an event to occur on the socket or timeout after 5 seconds. This will take care of the
    // hanging when no data is received (packet is dropped silently for example)
    $r = array ($recv_socket);
    $w = $e = array ();
    socket_select ($r, $w, $e, 5, 0);

    // Nothing to read, which means a timeout has occurred.
    if (count ($r)) {
        // Receive data from socket (and fetch destination address from where this data was found)
        socket_recvfrom ($recv_socket, $buf, 512, 0, $recv_addr, $recv_port);

        // Calculate the roundtrip time
        $roundtrip_time = (microtime(true) - $t1) * 1000;

        // No decent address found, display a * instead
        if (empty ($recv_addr)) {
            $recv_addr = "*";
            $recv_name = "*";
        } else {
            // Otherwise, fetch the hostname for the address found
            $recv_name = gethostbyaddr ($recv_addr);
        }

        // Print statistics
        printf ("%3d   %-15s  %.3f ms  %s\n", $ttl, $recv_addr,  $roundtrip_time, $recv_name);
    } else {
        // A timeout has occurred, display a timeout
        printf ("%3d   (timeout)\n", $ttl);
    }

    // Close sockets
    socket_close ($recv_socket);
    socket_close ($send_socket);

    // Increase TTL so we can fetch the next hop
    $ttl++;

    // When we have hit our destination, stop the traceroute
    if ($recv_addr == $dest_addr) break;
}

?>

你需要成为root。这意味着从网络服务器运行它时它可能不起作用,您必须从命令行运行它:

jthijssen@tarabas:~/traceroute$ sudo php traceroute.php
Tracerouting to destination: 199.6.1.164
  1   192.168.1.1      0.004 ms  192.168.1.1
  2   *                0.005 ms  static.kpn.net
  3   (timeout)
  4   139.156.113.141  0.005 ms  nl-asd-dc2-ias-csg01-ge-3-2-0-kpn.net
  5   195.190.227.221  0.005 ms  asd2-rou-1022.nl.euroringen.net
  6   134.222.229.105  0.005 ms  asd2-rou-1001.NL.eurorings.net
  7   134.222.97.186   0.007 ms  kpn-1402.xe-0-0-0.jun1.galilei.network.bit.nl
  8   213.154.236.75   0.012 ms  213.154.236.75
  9   199.6.1.164      0.012 ms  pub3.kernel.org

这是到 www.kernel.org 的跟踪路由。我已经删除了第二个跃点(因为那是我所在的 IP)。第三跳返回超时。可能是那里的站没有返回 ICMP 数据包以供使用。

上面的代码可以在github上找到:https://github.com/jaytaph/traceroute https://github.com/jaytaph/traceroute

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

PHP 脚本到 Traceroute? 的相关文章

  • 通过使用 AWS-SDK PHP 生成的预签名帖子拒绝 AWS S3 上传访问

    我正在尝试使用 AWS SDK PHP 生成的预签名帖子将文件 用于测试的图像 上传到我的 s3 存储桶 首先我生成预签名的帖子 然后我使用 Postman 或通过简单的 html 表单使用给定的 PostObjectV4 数据手动创建请求
  • 无法使用mailer类在php中发送邮件

    今天我在php中做了一些邮件处理 我发现有两种方法 一种是Php提供的简单邮件功能 另一种是我在互联网上找到的关于使用网站上的PHP邮件程序类https github com PHPMailer PHPMailer https github
  • Laravel 查询生成器 - 高级条件子句(可选参数)

    我需要带有接受可选参数的查询生成器的子句 例如 请考虑以下情况 我们有三个搜索字段 产品标题 公司名称和位置 邮政编码 城市或州 2 3 8 种可能性 该位置与 OR 连接 WHERE location postal code LIKE O
  • 如何使用mysqli准备好的语句?

    我正在尝试准备好的语句 但下面的代码不起作用 我收到错误 致命错误 在非对象上调用成员函数execute var www prepared php 第 12 行
  • CSV 损坏,如何修复?

    我正在尝试解析 CSV 我想将它放入数据库或只是用 JavaScript 解析它 但由于语法损坏 任何一种方法都会失败 我的整个 CSV 文件在这里 https gist github com 1023560 https gist gith
  • https 安全 cookie 是否可以防止 XSS 攻击?

    https 连接是否可以保护 cookie 并防止 XSS 攻击 我有一个简单的博客 允许用户输入 JavaScript 代码作为输入 我希望允许用户输入 Javascript 同时仍然防止 XSS 攻击和 cookie 窃取 https
  • 一旦我们点击取消按钮,文本字段就会隐藏

    我们正在使用 magento 多供应商网站 我们正在使用以下代码来更新和取消价格 但是一旦我们单击 取消 按钮 文本字段就会隐藏 PHTML span class label pro status span
  • 如何防止在以 .php 结尾的 URL 后添加其他字符串?

    我们网站的团队刚刚发现 任何用户都可以在以 php 扩展名结尾的 URL 后面添加斜杠 然后添加任何字符串 并且仍然可以访问相同的原始页面 例如 我可以通过以下方式访问 www mydomain com index php www mydo
  • 如何将更改后的 SimpleXML 对象保存回文件?

    因此 我有这段代码 用于搜索 XML 文件中的特定节点 取消设置现有节点并插入具有正确数据的全新子节点 有没有办法使用 simpleXML 将这些新数据保存在实际的 XML 文件中 如果没有 是否有另一种有效的方法来做到这一点 public
  • 使用 MySQL 检测垃圾邮件发送者

    我发现越来越多的用户在我的网站上注册 只是为了向其他用户发送重复的垃圾邮件消息 我添加了一些服务器端代码来使用以下 mysql 查询检测重复消息 SELECT count content as msgs sent FROM messages
  • MySQL使用BLOB的二进制存储VS OS文件系统:大文件、大数量、大问题

    我正在运行的版本 基本上 最新的一切 PHP 5 3 1MySQL 5 1 41阿帕奇 2 2 14操作系统 CentOS 最新 情况是这样的 我有数千个非常重要的文档 从客户合同到语音签名 客户对合同的授权录音 文件类型包括但不限于jpg
  • 使用 php 运行 ipconfig 命令

    我使用这段代码来了解访问者 客户 的一些信息 它一直在我的 Xampp 虚拟服务器上运行 但我无法在我的主服务器 主机 上运行 我只看到一个空白页 info system ipconfig all echo info 这可能对你有帮助 服务
  • Wordpress 主题管理面板显示本地服务器中的致命错误

    我有一个 WordPress 项目 这里我们使用主题jupiter 当我在本地 XAMPP 服务器上设置它时 它的主题选项不起作用 这个问题出在我的电脑上 但在另一台电脑上却正常 My XAMPP是最新版本 它显示的错误 Fatal err
  • 根据已知字符串列表检查字符串中常见的错误识别字符

    背景 我的 MySQL 数据库中有一个由六 6 个字符组成的代码列表 它们由随机选择的数字和字母组成 它们被认为不区分大小写 但在数据库中以大写形式存储 它们可能由以下数字组成0但从来没有这封信O 我使用这些代码作为用户的一次性身份验证 问
  • 弹性搜索模糊匹配,精确匹配首先显示

    我想在查询中使用模糊匹配 但精确匹配显示在结果的顶部 我已经尝试过以下方法 return this gt client gt search array index gt self INDEX type gt self TYPE body g
  • 消息:未定义索引:$_SERVER 中的 REMOTE_HOST

    当我尝试检索远程用户的主机名时 为什么会出现此错误 Message Undefined index REMOTE HOST 在阅读文档时 我了解到它需要在 httpd conf 中启用 但我不确定 httpd conf 中需要编辑什么 这不
  • PHP 按值合并数组以获得 2 个不同的数组值

    我尝试将两个不同的数组合并为一个数组 有人可以帮我吗 我有这样的数组 0 Array 2 rank 579 id 1 1 Array 4 rank 251 id 2 0 Array 2 size S rank 251 1 Array 15
  • 使用 php 和 jquery 的简单彗星示例

    谁能给我一个使用 PHP 的彗星技术的简单好例子 我只需要一个使用持久 HTTP 连接或类似连接的示例 我不想使用轮询技术 因为我已经设置了类似的东西 并且不仅难以使用和管理它的大量资源 另外我使用的是 IIS7 而不是 Apache 一个
  • 排除“解析错误,意外的‘>’”错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我收到这个
  • 总小时数无法从 Android 插入 MySQL

    我使用以下公式获得总小时数 public void updateTotalHours int a SplitTime objMyCustomBaseAdapter getFistTime int b SplitTime objMyCusto

随机推荐

  • 音频处理和删除音频的某些部分

    我是语音编码新手 现在我成功地在文件中录制麦克风 并将每 10 秒保存在一个文件中SaveRecordtoFile功能 这样做没有问题 现在我想从记录的数据中删除例如 2 秒 这样我的输出将是 8 秒而不是 10 秒 在randomTime
  • 如何获取当前运行的hadoop作业的名称?

    我需要获取当前正在运行的作业名称列表 但是hadoop job list给我一份 jobID 列表 有没有办法获取正在运行的作业的名称 有没有办法从 jobID 中获取作业名称 我不得不多次执行此操作 因此我想出了以下命令行 您可以将其放入
  • 如何从 Entity Framework 4.3 代码优先模型生成 DDL 脚本?

    我有一个正在尝试部署的项目 并且我正在使用廉价的主机来开始 作为托管包的一部分 我有一个 SQL Server 数据库 但我没有删除或创建权限 我只能使用他们为我创建的数据库 既然如此 我想获取 DDL 以便我可以手动运行它 我知道我可以从
  • 如何使用 JavaScript 函数式编程从对象列表中找到具有最低属性的对象?

    老方法 let min Number MAX VALUE for let item of food let current Problem manhattan distance player item if current gt min m
  • Webpacker/Typescript 无法解析 Rails 资产管道文件

    我正在尝试导入 Rails 资产管道中的文件 但由于某种原因 webpack 找不到它 这是我的 tsconfig json compilerOptions declaration false emitDecoratorMetadata t
  • 使用Spring Data JPA调用存储过程时如何传入数组

    我正在关注这个example https dzone com articles calling stored procedures from spring data jpa使用 Spring Data JPA 调用存储过程 这个想法是创建一
  • setNavigationItemSelectedListener 不工作

    My NavigationView onClick活动不起作用 以下是我一一尝试过的代码片段 但没有任何效果 实施NavigationView OnNavigationItemSelectedListener using OnClick M
  • Angular Ivy 在手动变更检测方面具体允许我们做什么?

    本文 https blog ninja squad com 2019 05 07 what is angular ivy 提到 不过 常春藤为未来开启了一些可能性 现在应该可以在没有 zone js 的情况下运行应用程序 并半手动处理更改检
  • 列表子列表优化

    问题是从给定列表中查找不包含大于指定上限数字的子列表总数right并且子列表的最大数量应该大于下限left假设我的清单是 x 2 0 11 3 0 子列表元素的上限是10下界是1那么我的子列表可以是 2 2 0 3 3 0 因为子列表始终是
  • Interlocked.Exchange 可空小数

    我想交换两个可为空的十进制值 如下所示 o2 Interlocked Exchange ref o1 o2 类型 十进制 必须是引用类型才能将其用作泛型类型或方法 System Threading Interlocked Exchange
  • 尝试在单独的实例中打开工作簿

    不确定我做得是否正确 请建议我 我正在尝试在新实例中打开一本工作簿 但有些地方效果不太好 下面是代码供您参考 我正在尝试在新实例中打开名为 Loginfrm 的表单 假设如果另一个工作簿已打开 则当前代码也会冻结该工作簿 理想情况下 这不应
  • 添加/删除程序中的 Wix 图标

    我正在使用 Wix 来创建我的安装程序 据官方称文档 http wixtoolset org documentation manual v3 howtos ui and localization configure arp appearan
  • 访问路径被拒绝 (Xamarin/Android)

    我运行的是 Windows 10 Visual Studio 2015 和 Xamarin 我对 Xamarin 相当陌生 只是为了设置地面水平 我最近更新后遇到了一个问题 我的应用程序在更新之前可以正常运行 我的所有文件都是只读的 更新之
  • 尝试使用 Jersey 创建 REt 服务

    我正在关注this http www vogella com articles REST article html first使用 Jersey 创建 REt 服务的教程 有时我无法完全理解本教程作者的意思 但这些是我到目前为止所遵循的步骤
  • lit-element 将数据从一个组件传递到另一个组件

    我目前正在学习如何使用 lit element v2 0 0 rc 2 我有两个组件 app js 和 list items js 在 app js 中 我从本地存储收集数据并将其存储在 this todoList 中 然后我在 list
  • Python 多处理性能

    这应该是我的第三个也是最后一个问题 涉及我尝试提高使用 python 进行的一些统计分析的性能 我的代码有 2 个版本 单核与多处理 我希望通过使用多个核心来获得性能 因为我希望我的代码能够解压 解压相当多的二进制字符串 遗憾的是我注意到使
  • 颜色分类库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Status 我正在开发自己的图书馆 https stackoverflow com question
  • 响应式设计,网站在手机上不滚动

    我正在设计一个响应式网站 它在桌面上运行良好 但当我在手机中测试时 我无法滚动页面 所以我只能看到适合设备高度的内容 注意 我什至包含了元名称 viewport 内容 宽度 设备宽度 initial scale 1 0 请帮我 你问这个问题
  • 使用 Keras 循环神经网络进行预测 - 准确度始终为 1.0

    TLDR 如何使用 Keras RNN 预测序列中的下一个值 我有一个连续值列表 我想将它们输入 RNNpredict序列中的下一个值 0 43589744 0 44230769 0 49358974 0 71153846 0 708333
  • PHP 脚本到 Traceroute?

    我有一个在 GoDaddy 共享 Linux 服务器上运行 PHP 的网站 我需要确定用户是否连接到公司 VPN 如果我简单地执行 SERVER REMOTE ADDR 它会给我客户端的 IP 地址 但是 如果我可以使用 Tracert 进