强制file_get_contents或stream_socket_client使用所需的dns服务器

问题描述 投票:0回答:3

file_get_contents()stream_socket_client()绑定到ip很容易,但是任何想法如何强制它使用所需的dns来解析域名?

例:

 $f = stream_socket_client("ssl://example.com:443",$errno,$errstr,30,STREAM_CLIENT_CONNECT,stream_context_create(array('socket'=>array('bindto' => "192.168.1.1:0"),

但是如何强制它通过给定的DNS解析example.com

问题是我无法通过IP连接到SSL,因为它说CN无效且DNS服务器不可靠。虽然找到了解决方案。答案如下。

php
3个回答
1
投票

好的,我找到了解决问题的方法。我想我的问题不够明确,但问题是在使用IP连接到SSL服务器时使用CN名称,因为我无法正确解析来自DNS的ip(系统中的DNS服务器经常失败)。

解决方案是在context部分ssl下添加到peer_name

<?php
   stream_context_create(... 'ssl'=>array('peer_name' => 'example.com' ...)
?>

0
投票

它应该从运行它的系统获取DNS,你能改变PHP服务器的本地DNS吗?


0
投票

PHP本身将使用其安装的服务器的DNS设置。由于php没有服务器级访问权限,你必须使用你自己的bash / shell脚本并使用类似dignslookup来实现这一点(使用PHP的bashshell函数调用exec() / shell_exec()脚本。 - 或者那里有一些图书馆。一个受欢迎的图书馆是使用DNS2建造的pear

所以你的选择是:

  1. DNS2之类的东西
  2. 自定义qazxsw poi / qazxsw poi脚本(与qazxsw poi或bash一起使用)
  3. 在机器上本地更改DNS设置shell已安装。

注意也可以通过在安装了exec的机器的hosts文件中输入静态IP地址来模拟这一点。

© www.soinside.com 2019 - 2024. All rights reserved.