【问题标题】:Creating IP layer packets in PHP?在 PHP 中创建 IP 层数据包?
【发布时间】:2011-10-25 16:17:42
【问题描述】:

我想知道是否可以使用 PHP 创建网络层数据包(即定义我自己的 IP 标头)?似乎 socket_createSOCK_RAW 只允许您定义 IP 数据包的内容,而不是标头本身。

提前感谢您的回复!

【问题讨论】:

  • 创建原始数据包需要什么?
  • 您使用的是什么操作系统?创建原始套接字通常需要 root 访问权限。更多信息:php.net/manual/en/function.socket-create.php#83877
  • @pix0r 我正在使用 Mac,root 访问没有问题。
  • @Marc 这是一个大学研究项目——我需要调整 IP 标头中的选项字段。
  • 为什么不用python呢?甚至还有一些不错的包使得构建和使用包非常容易。

标签: php networking


【解决方案1】:

只要我以 root 身份运行脚本,我就能够在 Mac OS X 上使用 SOCK_RAW 成功创建套接字。

我使用的例子取自Jean Charles MAMMANA's ping.inc.php

我创建了一个 ping.php 包装器,并执行:sudo ping.php www.google.com

这是我的 ping.php 包装器:

<?php

$default_timeout = 15;

require("ping.inc.php");

if (count($argv) < 2) usage();

$timeout = count($argv) >= 3 ? intval($argv[2]) : $default_timeout;
$host = $argv[1];

$result = ping($host, $timeout);
if ($result < 0) {
    echo "Error: " . $g_icmp_error . "\n";
} else {
    echo "$result ms\n";
}

function usage() {
    global $argv;
    echo "Usage: {$argv[0]} <host> [timeout]\n";
    die();
}

【讨论】:

    猜你喜欢
    • 2013-04-14
    • 2010-09-09
    • 2012-11-17
    • 2012-01-29
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多