curl请求https 实现2种方法

今天一位网友想用PHP做一个端口扫描,我推荐他用curl或fsockopen,最终用了curl。

 

虽然说PHP做端口扫描不是最佳的,但是玩玩还是可以的!结果,他说他的CURL请求https出不了结果,返回为空,甚至报证书的错误。

 

解决这个问题其实也很简单,curl的选项本身是支持这些的,只能说我们设置有问题而已,具体操作如下:

 

第一种方法:设定为不验证证书和host(推荐)

在执行curl_exec()之前,设置option,例如:

$ch = curl_init();

......

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

 

第二种方法:设定一个正确的证书。

本地ssl判别证书太旧,导致链接报错ssl证书不正确。

我们需要下载新的ssl 本地判别文件

http://curl.haxx.se/ca/cacert.pem

放到 程序文件目录

 

curl增加下面的配置代码:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); ;
curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');

 

最终:

他选择用了第一种方法,这样的话,curl请求既支持HTTP也支持HTTPS了,他的简单PHP扫描端口代码如下:

<?php
// 创建新的 cURL 资源
$ch = curl_init();

// 设置 URL地址与端口
curl_setopt($ch, CURLOPT_URL, "www.fujieace.com");
curl_setopt($ch, CURLOPT_PORT, "80");

//启用时会将头文件的信息作为数据流输出。
curl_setopt($ch, CURLOPT_HEADER, true);

//false 禁止 cURL 验证对等证书(peer's certificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//true 验证证书状态。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

//true 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 false 时不会变成 GET。
curl_setopt($ch, CURLOPT_NOBODY, false);

// 抓取 URL 并把它传递给浏览器
curl_exec($ch);

//获取一个cURL连接资源句柄的信息
$info = curl_getinfo($ch);

//得到状态码
var_dump($info["http_code"]);

// 关闭 cURL 资源,并且释放系统资源
curl_close($ch);
?>

 

最终扫描代码效果如下:

curl请求https 得到header头

 

总结:

做端口扫描原理就是这么简单,我给某个端口发个数据,只要有返回结果,就说明端口是存在的。

只能说此PHP端口扫描代码容易被检测到,如果我没有记错的话,此PHP端口扫描代码属于“Connect()扫描”

什么是Connect()扫描?

Connect()扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立接连,则证明端口开发,否则为关闭。准确度很高,但是最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。

    A+
发布日期:2021年03月12日 10:38:52  所属分类:PHP
最后更新时间:2021-07-07 10:40:55
付杰
  • ¥ 99.9元
  • 市场价:299元
  • ¥ 298.0元
  • 市场价:498.0元
  • ¥ 79.0元
  • 市场价:129.0元
  • ¥ 298.0元
  • 市场价:498.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: