在PHP中创建IP层数据包?

时间:2011-10-25 16:17:43

标签: php networking

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

提前感谢您的回复!

1 个答案:

答案 0 :(得分:0)

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

我使用的示例取自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();
}