首页 > 其他分享 >golang发送HTTP请求时获取目标IP (server ip)

golang发送HTTP请求时获取目标IP (server ip)

时间:2022-11-15 21:36:15浏览次数:70  
标签:HTTP IP fmt golang ip go http net

golang net/http库在发送http请求时会通过调用net下的Dialer建立TCP连接, net.Dialer 会在发起连接前执行通过ControlContext字段传入的一个函数, 我们可以通过这个函数获取ip、端口和网络名等信息。

https://cs.opensource.google/go/go/+/master:src/net/dial.go;l=110;drc=74b6a22057b393f198d2d86f4ea7504dacf390f5;bpv=0;bpt=1

示例代码:

package main

import (
	"fmt"
	"io/ioutil"
	"net"
	"net/http"
	"syscall"
)

func customControl(network string, address string, conn syscall.RawConn) error {
	fmt.Printf("%s,%s\n", network, address)
	return nil
}

func main() {
	dialer := &net.Dialer{
		Control: customControl,
	}
	t := http.DefaultTransport.(*http.Transport).Clone()
	t.DialContext = dialer.DialContext

	c := &http.Client{
		Transport: t,
	}
	resp, _ := c.Get("https://www.baidu.com")
	body, _ := ioutil.ReadAll(resp.Body)
	fmt.Printf("%s\n", body)
}

我们可以再这个函数里记录每个http请求的实际ip地址,也可以在这里对请求IP做一些策略和检查,比如防范SSRF等等。

标签:HTTP,IP,fmt,golang,ip,go,http,net
From: https://www.cnblogs.com/ed557/p/16894010.html

相关文章

  • 后端程序员必会的前端知识-02:JavaScript
    第二章.Javascript它是一种脚本语言,可以用来更改页面内容,控制多媒体,制作图像、动画等等例子修改页面内容js代码位置<script> //js代码</script>引入js脚......
  • JavaScript基础知识
    变量变量是数据的命名存储,我们可以用变量来保存商品、访客和其他信息。在JavaScript中创建一个变量,需要用到关键字let。例如:letmessage="hello";//将字符串hello保......
  • 有趣的 Go HttpClient 超时机制
    hello,大家好呀,我是既写Java又写Go的小楼,在写Go的过程中经常对比这两种语言的特性,踩了不少坑,也发现了不少有意思的地方,今天就来聊聊Go自带的HttpClient的超时机制......
  • HCIP-ICT实战进阶05-路由策略与策略路由
    HCIP-ICT实战进阶05-路由策略与策略路由0前言什么是路由策略?基于报文的目的IP地址进行路由表查找,之后转发数据;针对控制平面,为路由协议和路由表服务,针对路由......
  • http与https的区别、TCP三次握手与四次挥手
    ·http定义:http,超文本传输协议,是一个基于请求与响应的,无状态的,应用层协议,常基于TCP/IP协议进行传输数据,是互联网上最为广泛运用的传输协议,所有的www文件均需遵守该标准。......
  • iPhone所有手机型号屏幕尺寸
    1、表格整理手机型号尺寸物理点宽长比例像素点倍数状态栏高度底部安全距离导航栏高度tabbar高度iPhone4/4S3.5英寸320x4800.667640x960@2x20-4......
  • 常用的JavaScript代码技巧 (一)字符串、数字
    一、字符串类1.比较时间consttime1="2022-03-0510:00:00";consttime2="2022-03-0510:00:01";constovertime=time1<time2;//overtime=>true2.货币格式......
  • 常用的JavaScript代码技巧 (二)布尔、数组
    一、布尔1.基础操作consta=true&&false;//falseconstb=true||false;//trueconstc=!0;//true2.确定数据类型不判断的类型:undefined,null,stri......
  • 说说http,https协议
    HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传......
  • NOIP模拟3--目前只有一些鬼畜
    A.三元这东西虽然过了,但是感觉它好鬼畜啊,既没有用到三进制数,也没有把所有串的单个位拿出来讨论,我的dfs只是为了生成全排列……就这玩意还写了177行……什么鬼?#includ......