请教:如何指定IP与域名抓取url内容

请教:如何指定IP与域名抓取url内容

file_get_contents()这样的函数,只能指定域名或IP地址抓取url内容,但如果域名解析到的ip地址有误,如果既指定域名、又指定IP地址抓取URL呢?

实际上就是,把一个http请求发送到指定的ip地址上,而不是请求包中的域名dns解析的地址上。
本质上是dns劫持,通过hosts文件可以实现,但修改hosts太麻烦、而且如果是虚拟主机则无法实现。所以想在php程序的层面上实现这样功能,请教达人!


这里倒是有一个参考方案: http://blog.s135.com/post/389/ 
使用一个自定义函数,通过php建sock连接发送构造出来的http包
但也比较麻烦,不知是否有简洁高效的办法:使用类似curl的库函数,在发http请求时仅仅多指定一个目标ip地址

作者: fengyqf   发布时间: 2011-05-28

如果对方是单独的服务器,直接指定IP就行了,如果那边是一个IP多域名,除非知道端口,不然还是要域名发过去

我看你是不了解DNS机制

作者: snmr_com   发布时间: 2011-05-28

引用 1 楼 snmr_com 的回复:

如果对方是单独的服务器,直接指定IP就行了,如果那边是一个IP多域名,除非知道端口,不然还是要域名发过去

我看你是不了解DNS机制


服务器上有多个域名的多个站点,都是80端口,仅指定IP地址,web服务器会把请求发给默认站点,如果没有默认站点就是"Bad Request (Invalid Hostname)"


作者: fengyqf   发布时间: 2011-05-28

这种情况是单一入口,后面有DNS或者选择器跳转服务器/路径,只能发送域名过去

如果下面每台机器都各自接入互联网,就可以查各自IP,但如果通过网关或者单一出口接入互联网,就没办法

例如校园网,从外面只能找到网关的IP
例如公司几台电脑各自有个web,内部有DNS,通过一根线接入ISP,外部只能找到网关IP,由它分发请求

作者: snmr_com   发布时间: 2011-05-28

引用 3 楼 snmr_com 的回复:

这种情况是单一入口,后面有DNS或者选择器跳转服务器/路径,只能发送域名过去

如果下面每台机器都各自接入互联网,就可以查各自IP,但如果通过网关或者单一出口接入互联网,就没办法

例如校园网,从外面只能找到网关的IP
例如公司几台电脑各自有个web,内部有DNS,通过一根线接入ISP,外部只能找到网关IP,由它分发请求

你说的是主机配置“默认网关”吧,curl_setopt()有个配置项CURLOPT_INTERFACE好像就是指使用哪个默认网关的,前提是配置了多网卡。

但我所说并不是这样,举个例子吧:
www.mydomain.com的dns解析指向到192.168.100.8
但我在192.168.100.88 的服务器上配置了一个web站点,域名是www.mydomain.com
我想在192.168.2.10的主机上通过php抓取192.168.100.88 上的http://www.mydomain.com/file.html
使用file_get_contents('http://www.mydomain.com/file.html')得到肯定是192.168.100.8上的页面。
当然在主机192.168.2.10配置hosts使它认为www.mydomain.com就在192.168.100.88上,这样是可以的;不过如果我没有权限修改192.168.2.10的hosts文件,就不行了。

其实http://blog.s135.com/post/389/这里的问题跟我所说的是类似的。

作者: fengyqf   发布时间: 2011-05-28

既然这样,你用他给出的例子不行么?


其实他的代码也是逐个IP尝试,不行的返回false,行的就得到结果

作者: snmr_com   发布时间: 2011-05-28