PHP怎么检测端口有没有开启

fiy 其他 228

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在PHP中,可以使用socket函数来检测端口是否开启。具体步骤如下:

    1. 创建一个socket套接字:
    “`
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    “`

    2. 设置socket选项:
    “`
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(‘sec’ => 1, ‘usec’ => 0));
    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array(‘sec’ => 1, ‘usec’ => 0));
    “`

    3. 连接到目标IP和端口:
    “`
    $ip = “目标IP地址”;
    $port = 目标端口;

    $result = socket_connect($socket, $ip, $port);
    “`
    请将”目标IP地址”替换为实际的目标IP地址,将”目标端口”替换为实际的目标端口号。

    4. 判断连接结果:
    “`
    if ($result === false) {
    // 端口未开启
    echo “端口未开启”;
    } else {
    // 端口已开启
    echo “端口已开启”;
    }
    “`

    完整代码如下所示:
    “`
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(‘sec’ => 1, ‘usec’ => 0));
    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array(‘sec’ => 1, ‘usec’ => 0));

    $ip = “目标IP地址”;
    $port = 目标端口;

    $result = socket_connect($socket, $ip, $port);

    if ($result === false) {
    echo “端口未开启”;
    } else {
    echo “端口已开启”;
    }
    “`

    请将”目标IP地址”替换为实际的目标IP地址,将”目标端口”替换为实际的目标端口号。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    要检测端口是否开启,可以使用PHP的网络函数。下面是五个方法:

    1. 使用fsockopen函数

    fsockopen函数可以打开一个网络连接,并返回一个文件指针,如果连接成功则表示端口开启,否则表示端口关闭。以下是一个示例代码:

    “`php
    function isPortOpen($host, $port) {
    $fp = fsockopen($host, $port, $errno, $errstr, 1);
    if ($fp) {
    fclose($fp);
    return true;
    } else {
    return false;
    }
    }
    “`

    使用该函数,可以传入待检测的主机和端口,如果返回值为true,则表示端口开启;如果返回值为false,则表示端口关闭。

    2. 使用socket_connect函数

    socket_connect函数可以通过创建一个套接字并与特定的IP地址和端口建立连接来检测端口是否开启。以下是一个示例代码:

    “`php
    function isPortOpen($host, $port) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
    return false;
    }
    $result = socket_connect($socket, $host, $port);
    socket_close($socket);
    if ($result === true) {
    return true;
    } else {
    return false;
    }
    }
    “`

    使用该函数,可以传入待检测的主机和端口,如果返回值为true,则表示端口开启;如果返回值为false,则表示端口关闭。

    3. 使用stream_socket_client函数

    stream_socket_client函数是PHP的一个内置函数,可以用于打开一个网络连接。以下是一个示例代码:

    “`php
    function isPortOpen($host, $port) {
    $fp = @stream_socket_client(“tcp://$host:$port”, $errno, $errstr, 1);
    if ($fp) {
    fclose($fp);
    return true;
    } else {
    return false;
    }
    }
    “`

    使用该函数,可以传入待检测的主机和端口,如果返回值为true,则表示端口开启;如果返回值为false,则表示端口关闭。

    4. 使用exec函数

    exec函数可以执行一个系统命令,并返回执行结果。可以使用exec函数执行telnet命令来检测端口是否开启。以下是一个示例代码:

    “`php
    function isPortOpen($host, $port) {
    $output = [];
    exec(“timeout 1 telnet $host $port”, $output, $return_var);
    if ($return_var === 0) {
    return true;
    } else {
    return false;
    }
    }
    “`

    使用该函数,可以传入待检测的主机和端口,如果返回值为true,则表示端口开启;如果返回值为false,则表示端口关闭。

    5. 使用cURL函数

    cURL函数是PHP提供的一个开源的用于与各种服务器进行通信的库。可以使用cURL函数来发起一个GET或POST请求,通过观察请求结果的状态码来判断端口是否开启。以下是一个示例代码:

    “`php
    function isPortOpen($host, $port) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, “http://$host:$port”);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
    if ($info[‘http_code’] === 200) {
    return true;
    } else {
    return false;
    }
    }
    “`

    使用该函数,可以传入待检测的主机和端口,如果返回值为true,则表示端口开启;如果返回值为false,则表示端口关闭。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在PHP中,可以通过一些方法来检测某个端口是否开启。下面是一种常用的方法,通过创建一个Socket连接来测试端口是否开放。

    方法一:使用Socket连接
    1. 创建一个Socket连接
    “`php
    $host = ‘127.0.0.1’; // 主机地址
    $port = 80; // 端口号

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    “`

    2. 设置连接选项
    “`php
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(‘sec’ => 1, ‘usec’ => 0)); // 设置接收超时时间为1秒
    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array(‘sec’ => 1, ‘usec’ => 0)); // 设置发送超时时间为1秒
    “`

    3. 尝试连接到目标端口
    “`php
    $result = socket_connect($socket, $host, $port);
    “`

    4. 检查连接结果
    “`php
    if ($result === true) {
    echo “端口已开启”;
    } else {
    echo “端口未开启”;
    }
    “`

    5. 关闭Socket连接
    “`php
    socket_close($socket);
    “`

    方法二:使用fsockopen函数
    另一种方法是使用fsockopen函数,该函数可以用于打开一个网络连接。
    “`php
    $host = ‘127.0.0.1’; // 主机地址
    $port = 80; // 端口号
    $timeout = 1; // 超时时间,单位为秒

    $socket = fsockopen($host, $port, $errno, $errstr, $timeout);
    if ($socket) {
    echo “端口已开启”;
    fclose($socket);
    } else {
    echo “端口未开启”;
    }
    “`

    以上两种方法都是通过建立一个TCP连接来测试端口是否开启。你可以将目标IP地址和端口号替换为你需要检测的地址和端口。如果连接成功,则说明端口是开启的;如果连接失败,则说明端口未开启。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部