curl --resolve参数的作用

之所以会有这样的操作,是因为域名一般对应的都是一个反向代理,直接请求域名,反向代理会将流量随机选一台机器打过去,而无法确保所有的机器都可用。所以直接用ip。


curl 命令中,--resolve 参数用于指定自定义的主机名解析规则。通过使用 --resolve 参数,你可以将指定的主机名解析为指定的 IP 地址,并将该解析结果应用于 curl 请求中。

具体来说,--resolve 参数的语法如下:

curl --resolve <host:port:address> <URL>

其中:

  • <host:port> 是你希望自定义解析的主机名和端口号的组合。
  • <address> 是你希望将该主机名解析为的自定义 IP 地址。

通过指定 --resolve 参数,curl 将绕过标准的 DNS 解析过程,直接使用你提供的自定义 IP 地址来发送请求。这对于模拟特定的网络环境或测试特定服务器配置非常有用。

以下是一个示例:

curl --resolve example.com:80:127.0.0.1 http://example.com

上述命令将主机名 example.com 解析为 IP 地址 127.0.0.1,然后发送 HTTP 请求到 http://example.com。在这个示例中,--resolve 参数将请求定向到本地主机,绕过了标准的 DNS 解析过程。

请注意,--resolve 参数只影响当前 curl 命令的执行,不会修改系统的实际 DNS 解析规则。它仅用于在特定情况下进行临时的主机名解析定制。


之前在网易,经常用到这个命令

alt

curl --resolve 'brain-prd-jd.netease.im:443:xxx.xxx.xxx.xx' https://brain-prd-jd.netease.im/v1/whois/brain

即绕过DNS解析,直接将https://brain-prd-jd.netease.im/v1/whois/brain这个请求,指向xxx.xxx.xxx.xx这个ip所对应的机器


其实用--resolve参数, 和绑定host一样的效果:

alt

因为可能是m个域名,对应n个ip(n台机器),无论是挨个curl --resolve,还是修改host,都会很麻烦,写过一个检查绑定关系的工具:

package main

import (
 "context"
 "errors"
 "flag"
 "fmt"
 "net"
 "net/http"
 "strings"
 "time"
)

var (
 domain = flag.String("domain""""请输入域名列表,中间用英文逗号分隔")
 ip     = flag.String("ip""""请输入ip列表,中间用英文逗号分隔")
 whois  = flag.String("whois""""请输入whois地址,形如 /v1/whois/brain")
 method = flag.String("method""GET""HTTP 请求的方法,默认 GET")
 body   = flag.String("body""""HTTP 请求的 body,默认空")
)

const (
 ErrorColor = "\033[1;31m%s\033[0m" // red
 InfoColor  = "\033[1;32m%s\033[0m" // green
)

func main() {

 flag.Parse()

 domainStr := *domain
 ipStr := *ip

 checkPath := *whois

 if len(domainStr) == 0 || len(ipStr) == 0 || len(checkPath) == 0 {
  fmt.Printf(ErrorColor, "请输入域名,ip和检验地址\n")
  return
 }

 domainSli := strings.Split(domainStr, ",")

 ipSli := strings.Split(ipStr, ",")

 if len(domainSli) == 0 || len(ipSli) == 0 {
  fmt.Printf(ErrorColor, "请输入正确格式的域名和ip\n")
  return
 }

 //校验ip格式 (未校验域名格式)
 for _, v := range ipSli {
  ipItem := net.ParseIP(v)
  if ipItem == nil {
   fmt.Printf(ErrorColor, "ip格式错误\n")
   return
  }
 }

 for _, i := range domainSli {
  for _, j := range ipSli {

   if err := check(i, j, checkPath); err != nil {
    errmsg := fmt.Sprintf("域名:%s,ip:%s 错误:%#v\n", i, j, err)
    fmt.Printf(ErrorColor, errmsg)
    //return
   }
  }
 }

 fmt.Printf(InfoColor, "全部校验成功\n")

}

func check(domain, ip, checkPath string) error {

 dialer := &net.Dialer{
  Timeout:   30 * time.Second,
  KeepAlive: 30 * time.Second,
 }

 http.DefaultTransport.(*http.Transport).DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {

  if addr == domain+":443" {
   addr = ip + ":443"
  }
  return dialer.DialContext(ctx, network, addr)
 }

 client := http.Client{Timeout: 5 * time.Second}
 req, err := http.NewRequest(*method, domain+checkPath, strings.NewReader(*body))
 if err != nil {
  return fmt.Errorf("NewRequest error: %w", err)
 }
 resp, err := client.Do(req)

 if err != nil || resp == nil {
  return errors.New("发生错误")
 }

 if resp.StatusCode != http.StatusOK {
  return errors.New("错误码非200")
 }

 msg := fmt.Sprintf("域名:%s,ip:%s,whois:%s 请求成功\n", domain, ip, checkPath)
 fmt.Printf(InfoColor, msg)

 return nil

}

可以直接通过

go run checkbind.go -domain https://域名1,https://域名2 -ip 119.147.xxx.xx,120.147.xxx.xx -whois /v1/whois/health_check来检测


使用 CURL 的“--resolve“选项将请求固定到 IP 地址

Golang将HTTP请求发往指定的IP

Golang force http request to specific ip (similar to curl –resolve)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想解锁禁用的iPhone?除了可以使用电脑之外,这里还有不需要电脑的方法!

多次输入错误的密码后,iPhone将显示“iPhone已禁用”。这种情况看起来很棘手,因为你现在不能用iPhone做任何事情。对于这种情况,我们提供了几种有效的方法来帮助你在最棘手的问题中解锁禁用的iPhone。你可以选择使用或不使用电脑来解锁禁用的iPhone。 一、为什么你的iPhone…

基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

基于FPGA的FIR低通滤波器实现(附工程源码) 文章目录 基于FPGA的FIR低通滤波器实现(附工程源码)前言一、matlab设计FIR滤波器&#xff0c;生成正弦波1.设计FIR滤波器1.生成正弦波.coe 二、vivado1.fir滤波器IP核2.正弦波生成IP核3.时钟IP核设置4.顶层文件/测试文件代码 三.simul…

【30天熟悉Go语言】11 数组的全方位使用与解析

作者&#xff1a;秃秃爱健身&#xff0c;多平台博客专家&#xff0c;某大厂后端开发&#xff0c;个人IP起于源码分析文章 &#x1f60b;。 源码系列专栏&#xff1a;Spring MVC源码系列、Spring Boot源码系列、SpringCloud源码系列&#xff08;含&#xff1a;Ribbon、Feign&…

OLED透明屏水波纹效果:打造独特的显示体验

OLED透明屏水波纹效果是一种独特的显示技术&#xff0c;通过模拟水波纹的视觉效果&#xff0c;为用户带来更加生动逼真的观感。 根据市场调研报告显示&#xff0c;OLED透明屏水波纹效果已经在广告、游戏和商业领域得到广泛应用&#xff0c;为品牌提供了新的展示方式&#xff0…

根据源码,模拟实现 RabbitMQ - 网络通讯设计,自定义应用层协议,实现 BrokerServer (8)

目录 一、网络通讯协议设计 1.1、交互模型 1.2、自定义应用层协议 1.2.1、请求和响应格式约定 ​编辑 1.2.2、参数说明 1.2.3、具体例子 1.2.4、特殊栗子 1.3、实现 BrokerServer 1.3.1、属性和构造 1.3.2、启动 BrokerServer 1.3.3、停止 BrokerServer 1.3.4、处…

【数据分析】波士顿矩阵

波士顿矩阵是一种用于分析市场定位和企业发展战略的管理工具。由美国波士顿咨询集团&#xff08;Boston Consulting Group&#xff09;于1970年提出&#xff0c;并以该集团命名。 波士顿矩阵主要基于产品生命周期和市场份额两个维度&#xff0c;将企业的产品或业务分为四个象限…

LAMP架构详解+构建LAMP平台之Discuz论坛

L A M P 一、LAMP架构简介1.1 LAMP架构的组成1.2 LAMP各组件的主要作用1.3 LAMP工作过程1.4 CGI和fastcgi 二、搭建Discuz论坛的思路三、编译安装Apache httpd3.1 前置准备3.2 移动apr包 apr-util包到安装目录中&#xff0c;并切换到 httpd-2.4.29目录中3.3 编译安装3.4 建立软…

dvwa xss通关

反射型XSS通关 low难度 选择难度&#xff1a; 直接用下面JS代码尝试&#xff1a; <script>alert(/xss/)</script>通关成功&#xff1a; medium难度 直接下面代码尝试后失败 <script>alert(/xss/)</script>发现这段代码直接被输出&#xff1a; 尝试…

开始MySQL之路——外键关联和多表联合查询详细概述

多表查询和外键关联 实际开发中&#xff0c;一个项目通常需要很多张表才能完成。例如&#xff0c;一个商城项目就需要分类表&#xff0c;商品表&#xff0c;订单表等多张表。且这些表的数据之间存在一定的关系&#xff0c;接下来我们将在单表的基础上&#xff0c;一起学习多表…

Qt --- 自定义提示框 类似QMessagebox

QMessageBox::information(NULL, QString("title"), QString("I am information")); 以下是自定义提示框的代码&#xff0c;有图有真相&#xff01;提示框大部分都采用模态的形式&#xff0c;关于模态也不再多提&#xff01;所以父类为QDialog&#xff0c;…

若依移动端Ruoyi-App 项目的后端项目入门

后端项目运行 运行报错 Error creating bean with name sysConfigServiceImpl: Invocation of init method failed 数据库创建了。 代码连接数据库地方了也匹配上了。但是还是报错。 分析 &#xff1a; 想起来我电脑从来没有安装过redis 下载安装redis到windows 链接&…

【Mac】编译Spring 源码和Idea导入

今天我们开始Spring源码的阅读之旅。阅读Spring的源码的第一步当然是编译Spring源码。首先我们要去GitHub上将spring源码给clone下来。 笔者编译环境如下&#xff1a; Spring版本&#xff1a;5.28 https://github.com/spring-projects/spring-framework/tree/v5.2.8.RELEASE …

人工智能项目集合推荐(数据集 模型训练 C++和Android部署)

人工智能项目集合推荐(数据集 模型训练 C和Android部署) 目录 人工智能项目集合推荐(数据集 模型训练 C和Android部署) 1.三维重建项目集合 ★双目三维重建 ★结构光三维重建 2.AI CV项目集合 ★人脸检测和人体检测 ★人体姿态估计(人体关键点检测) ★头部朝向估计 …

【C++初阶】模拟实现list

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Consul的简介与安装

1、Consul简介 Consul是一套开源的分布式服务发现和配置管理系统&#xff0c;由HashiCorp公司用Go语言开发&#xff0c;Consul提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全方位的服…

Docker容器与虚拟化技术:GitHub账户注册

目录 一、实验 1.GitHub 一、实验 1.GitHub &#xff08;1&#xff09;GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 &#xff08;2&#xff09;官网 GitHub: Let’s build from here …

DQL语句的用法(MySQL)

文章目录 前言一、DQL语句间接和语法1、DQL简介2、DQL语法 二、DQL语句使用1、基础查询&#xff08;1&#xff09;查询多个字段&#xff08;2&#xff09;为字段设置别名&#xff08;3&#xff09;去除重复记录 总结 前言 本文主要介绍SQL语句中DQL语句的功能和使用方法&#…

本地私有仓库、harbor私有仓库部署与管理

本地私有仓库、harbor私有仓库部署与管理 一、本地私有仓库1.本地私有仓库简介2.搭建本地私有仓库3.容器重启策略介绍 二、harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3.Harbor的构成4.harbor部署及配置5.客户端测试 三、Harbor维护1.创建2.普通用户操作私有仓库3.日…

opencv-全景图像拼接

运行环境 python3.6 opencv 3.4.1.15 stitcher.py import numpy as np import cv2class Stitcher:#拼接函数def stitch(self, images, ratio0.75, reprojThresh4.0,showMatchesFalse):#获取输入图片(imageB, imageA) images#检测A、B图片的SIFT关键特征点&#xff0c;并计算…

C#,《小白学程序》第四课:数学计算

1 文本格式 /// <summary> /// 《小白学程序》第四课&#xff1a;数学计算 /// 这节课超级简单&#xff0c;就是计算成绩的平均值&#xff08;平均分&#xff09; /// 这个是老师们经常做的一件事。 /// </summary> /// <param name"sender"></…