【问题标题】:Accessing my home network using CURL使用 CURL 访问我的家庭网络
【发布时间】:2023-03-29 05:21:02
【问题描述】:

这个问题涵盖了 ServerFault.com 和这里,但这似乎比服务器更多编程。我将我的家用计算机设置为运行 Apache 服务器。它响应端口 5900,该端口是从我的无线路由器转发的端口。然后我设置了一个动态 DNS 服务器来不断更新我的家庭网络的 IP 地址。我知道这部分有效,因为我在不同的无线网络上使用了不同的计算机,并且能够使用 MYURL.com:5900 访问我服务器的索引页面。

我的目标是现在向我的家庭服务器发送一条消息。我在我的家庭服务器上编写了一个脚本,如果我向它发送一条 POST 消息,它会将该消息保存到一个文件中。换句话说,一系列事件应该是这样的:

  1. 我登录我的网页,在 Input 中输入文本,然后点击发送按钮
  2. 消息被传递到我的网站服务器。
  3. 我的服务器运行一个脚本,该脚本使用 CURL 将消息作为 POST 发送到我的家庭服务器的 DDNS
  4. 家中的服务器接收帖子,并运行将其写入文件的脚本。

我知道如何做 1,2 和 4。我一直试图让 3 工作但不能。我什至无法让 CURL 读取我的家庭服务器的 index.html。这是我在 CURL 中使用的代码(使用 PHP):

    $string = 'http://MYURL.com';

    echo "sending to " . $string . '<br/>';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PORT, 5900);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $response = curl_exec($ch);

    if(curl_error($ch))
    {
        echo curl_error($ch);
    }
    echo $response;

    curl_close($ch);

我使用 google.com 和默认端口对此进行了测试,它运行良好。它呼应了 google 给我的 html。但是,当我在家庭服务器的 DNS 上运行它时,它总是超时。当我不添加超时时,它说它无法连接。这是使用完全相同的 URL,当放入浏览器时,它会正确地向我发送我的家庭服务器的 index.html。

有谁知道出了什么问题?另外,如果有更好的方法来做到这一点,那是什么?

我知道这是一个很长的问题,所以非常感谢。

伊森

【问题讨论】:

    标签: php scripting curl


    【解决方案1】:

    你从哪里测试这个?如今,大多数网络都设有严密的防火墙,并且不允许与陌生端口的传出连接。你的 5900 端口当然是奇怪的。

    您使用无线(我假设是 3G?)网络进行测试的原因是因为 PC/笔记本电脑恰好直接连接到互联网,因此没有被防火墙阻止。

    测试防火墙理论的最简单方法是在您的服务器上的 80 端口上设置一个测试页面,并尝试使用 CURL 访问它。如果可行,那么您就知道问题是路由器和代理链中的某个人阻塞了您的端口 5900。


    关于为什么端口 80 不被视为“奇怪”的一点点:

    端口 80 是 port conventionally used for HTTP (web server) as assigned by IANA。因此,考虑到人们连接到互联网的主要原因是访问万维网(在 HTTP 上运行,因此需要打开端口 80),它通常不会被阻止。阻止端口 80 使互联网实际上毫无用处(嗯,不完全是,您仍然有电子邮件)。如果系统管理员阻塞了 80 端口,他还不如断开互联网连接。这就是为什么默认情况下不阻止端口 80。

    现在,这对家庭服务器管理员意味着什么。当然,您的 IP 地址只有一个 80 端口。这意味着实际上只能有一个端口转发规则附加到端口 80。这意味着您的本地网络上只能有一台计算机向外界提供网页服务* .如果你的弟弟或妹妹想要运行另一个网络服务器,那么他/她将不得不使用另一个端口。

    这就是为什么 Web 服务器被设计为服务多个网页的原因(它们检测 URL,因此单个端口 80 可以为不同的站点提供服务)。它允许单个 IP 地址从一台机器为不同的网站提供服务。谷歌:http virtual host 了解更多信息。

    *注意:不完全正确,您可以使用负载平衡或重新路由代理将 HTTP 请求重定向到网络上的其他机器。但原理仍然是正确的。只有一台机器的 80 端口可以直接暴露在互联网上。其他只是代理。

    【讨论】:

    • 5900 并不奇怪——它是 VNC 的标准端口
    • 对于系统管理员 VNC 很奇怪(不正常)。非奇怪的端口是通常的嫌疑人:80、443、53、21 等。Windows 系统管理员甚至认为端口 22 很奇怪。
    • 我以前从未真正做过这些事情。我只是随机选择了 5900,因为它没有使用过。这是我家的无线路由器。据我了解,80 是默认的 TCP/IP 端口。将 80 端口转发到我的笔记本电脑不是意味着没有其他人可以使用该无线路由器上的 80 端口和互联网吗?
    • 不,端口 80 不是默认的 TCP/IP 端口。端口 80 是传统的 HTTP(Web 服务器)端口,就像端口 110 是传统的 POP3(电子邮件)端口一样。互联网上的每个人都希望 Web 服务器使用端口 80。几乎所有网站都使用端口 80(如果使用 HTTPS,则使用端口 443)。我会在我的回答中详细说明。
    • 我成功了!显然,正如您所说,我的站点托管在阻止端口 5900 上的服务器。对此,我真的非常感激!我不明白的一件事是:假设我将 80 端口转发到我的计算机。然后我的室友尝试使用 Firefox。他将请求从端口 80 发送到 google.com 的端口 80。然后 Google 将响应发送回我们的端口 80。然后响应不会转发给我吗?那岂不是让他不能再使用万维网了?
    【解决方案2】:

    有时路由器会阻止您从内部网络访问外部 IP 地址。

    尝试telnet自己的外网IP,从内网访问5900端口,看看是不是这样。

    【讨论】:

    • 在我使用不同的计算机、IP 地址和无线路由器的情况下,我的测试不会涵盖此测试吗?我能够使用浏览器访问我的家庭网络。浏览器不是发送本质上相同的 GET 请求吗?
    • 你是,但是从另一个网络,试着从你的内部网络访问你的外部 IP,看看它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2014-05-25
    • 2014-12-04
    • 2016-05-11
    • 2013-09-27
    相关资源
    最近更新 更多