如何通过IP地址访问共享服务器上的网站?


18

我有几个问题,请帮忙:

拳头,我可以通过输入来访问Google搜索http://74.125.224.211,因为这是nslookup返回的IP地址。

但是,对于从www.yahoo.com返回的IP地址,我无法这样做。如何通过IP转到Yahoo搜索页面?

另一个示例,http://www.allaboutcircuits.com68.233.243.63通过DNS服务器解析,但是如果转到http://68.233.243.63,则会显示“ Hello world!”。

其次,由于某种原因,我的网络托管服务的DNS解析器出了点问题(它将无法修复!)。所以像

get_file_contents("http://www.allaboutcircuits.com");

将返回 php_network_getaddresses: getaddrinfo failed: Name or service not known

我该如何解决IP地址问题,

68.233.243.63

我的意思是,以某种方式将HTTP主机名参数附加到get_file_contents()

我想自己解决(在我的代码中),服务器管理员不会进行任何故障排除/调整。


9
了解有关虚拟服务器以及单个主机如何能够托管许多网站的信息。
wallyk 2012年

我认为出于某些原因您不能仅使用域名吗?
艾萨克·拉比诺维奇

@Isaac Rabinovitch:user1502776说:“我的网络托管服务的DNS解析器出了点问题(将无法解决!)”和“我想自己解决(在我的代码中),不进行故障排除/调整将由服务器管理员完成。”
Bavi_H 2012年

3
如果您的服务器管理员如此愚蠢,则需要查找其他虚拟主机提供商。
迈克尔·汉普顿

Answers:



10

如wallyk所说,它是虚拟服务器

以Apache为例

<VirtualHost *:80>
ServerName example2.com
DocumentRoot C:/www/example2.com
</VirtualHost>

<VirtualHost *:80>
ServerName example.com
DocumentRoot C:/www/example.com
</VirtualHost>

在c:\ www \ example.com中创建一个索引文件,上面写着“ Hello World!example.com”

在c:\ www \ example2.com中创建一个索引文件,内容为“ Hellow World!example2.com”

并将您的主机文件更改为

127.0.0.1 example.com
127.0.0.1 example2.com

然后转到http://example.com, 然后转到http://example2.com

这样便可以在每个IP中拥有多个站点

所以基本上答案是,不,您将无法从ip获取该站点。


我的意思是仅靠IP是不够的。但是是否有任何PHP命令使用我提供的IP和主机名来获取远程网页?该命令不应查询DNS。
user1502776 2012年

4
尽管从技术上讲这可能是准确的,但它不能解决问题。问题是,如何使用PHP脚本从具有已知IP的服务器请求具有已知主机名的特定站点,而又不通过DNS自动解析IP地址。它不问如何找到与给定IP对应的主机名。wallyk的评论更具相关性,因为他的链接包含有关Host标头的信息,该标头是服务器区分其托管的网站和提供正确的网站所必需的。
鲍勃

5

您说要手动指定主机名和IP地址,而不是依赖控件外部的DNS服务器。查看file_get_contents文档中的注释,我看到那里的注释者通过创建包含所需的Host:标头的上下文解决了类似的问题。像这样:

$context = stream_context_create(array('http' => array('header' => 'Host: www.allaboutcircuits.com')));
$data = file_get_contents('http://68.233.243.63/', 0, $context);

当然,请注意,手动指定主机名和IP地址的缺点在于,如果将来IP地址发生更改(例如,如果站点移至新的托管服务提供商),则您的代码可能会停止工作,直到您手动更新IP地址。


2

当多个虚拟主机在同一端口/服务器上运行时,仅IP地址还不足以唯一标识要转到的站点。在这种情况下,您需要在HTTP请求中指定用于标识服务器名称的Host标头。您可以直接通过telnet到端口80进行此操作:

$ telnet 68.233.243.63 80
Trying 68.233.243.63...
Connected to 68.233.243.63.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.allaboutcircuits.com

在其中键入telnet命令以及GET和Host行,然后获取从服务器返回的HTML源代码。

或者,您可以在专门添加标头(带有-H标志)的地方使用curl 。

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"

1

其次,由于某种原因,我的网络托管服务的DNS解析器出了点问题(将无法解决!)

如果不是Web主机,则可以在客户端使用另一台DNS服务器-8.8.8.8和8.8.8.6由Google运行,而4.4.4.2是常用的备用服务器。Namebench将让您找到最快的。另外,您可以使用某种代理服务(我在VPS上运行自己的代理服务,或使用Tor,但还有其他选择)。

由于这是PHP,因此更简单的选择是在另一个系统上运行代码。闪烁是无法维持的。


听起来他在某个共享主机上,并且无法修改DNS,这就是为什么他有一个警告:“我想自己解决(在我的代码中),服务器管理员不会进行任何故障排除/调整。 ” 我认为他不能修改DNS。。。
ernie 2012年

1
他可以在客户端使用备用dns服务器进行测试。如果他的虚拟主机未正确设置虚拟主机,则需要另一个虚拟主机。
Journeyman Geek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.