golang 监听ip数据包(golang纯享版)

golang 监听ip数据包(golang纯享版)

【注】本机编译运行平台为linux,如需测试代码请移至linux平台进行代码测试

本文以ip4 作为案例进行包抓取示范,ip6抓取与ip4方式异曲同工,可自行举一反三得出

第一步,通过wireshark抓包拿到ip4下的tcp/udp包,通过wireshark可视化我们可以很容易找到我们需要的源/目的地址信息所在ip包字节数. 这里两张截图,一张ip4,一张ip6的
请添加图片描述
请添加图片描述

第二步,编写我们秘制的简易抓包工具,此处以直接输出来源和去向地址为例,自己可以根据需求做更改

package inetimport ("encoding/binary""fmt""strconv""syscall""unsafe"
)func reverse(b []byte) {var (mid  uint8blen = len(b))if blen > 1 {for i := 0; i < blen/2; i++ {mid = b[i]b[i] = b[blen-i-1]b[blen-i-1] = mid}}
}
//主机字节序变网络字节序
func Htons[T uint | uint16 | uint32 | uint64](t T) T {var (b   []byte = make([]byte, unsafe.Sizeof(t))ptr *T     = (*T)(unsafe.Pointer(&b[0])))*ptr = treverse(b)return *ptr
}//ip包必选,ip6自行根据wireshark进行编写,此处ip4为例
type IPHeader struct {Version_And_Len        uint8//前4个bit为version(4 ip4,6 ip6),后bit个字节为首部length xxxx xxxxDiffernetialtedService uint8Tot_Len                uint16Id                     uint16Flag_And_Seek          uint16//前3bit 为flag后面13bit为seekTTL                    uint8Protocol               uint8CheckSum               uint16Source                 uint32Dest                   uint32
}
type PortInfo struct {Source uint16Dest   uint16
}var (__IP_DEFAULT  IPHeaderIPHEADER_SIZE = int(unsafe.Sizeof(__IP_DEFAULT))
)func Watch(watcher func([]byte, int)) error {//socket af_packet 会抓取全部网卡的IP数据包,如需监听特定的网卡请自行判断fd, _, err_ := syscall.Syscall(syscall.SYS_SOCKET, syscall.AF_PACKET, syscall.SOCK_DGRAM, uintptr(Htons[uint16](syscall.ETH_P_IP)))if int(fd) < 0 {return err_}ifd := int(fd)var (buff []byte = make([]byte, 512)lang interr error)defer syscall.Close(ifd)fmt.Println("start watch raw stream", ifd)for {lang, _, err = syscall.Recvfrom(ifd, buff, 0)if lang <= 0 {break}watcher(buff, lang)}return err
}
//输出所有来源去向
func print_info(info []byte, size int) {if size <= IPHEADER_SIZE {return}var (ipheader *IPHeader = (*IPHeader)(unsafe.Pointer(&info[0]))portinfo *PortInfo)if size > IPHEADER_SIZE+4 {portinfo = (*PortInfo)(unsafe.Pointer(&info[IPHEADER_SIZE]))fmt.Printf("src %s:%d dst %s:%d\n", Raw2String(ipheader.Source), portinfo.Source, Raw2String(ipheader.Dest), portinfo.Dest)} else {fmt.Printf("src %s dst %s\n", Raw2String(ipheader.Source), Raw2String(ipheader.Dest))}}
func Raw2String(src uint32) string {raw := make([]byte, 4)binary.LittleEndian.PutUint32(raw, src)return strconv.FormatUint(uint64(raw[0]), 10) + "." + strconv.FormatUint(uint64(raw[1]), 10) + "." + strconv.FormatUint(uint64(raw[2]), 10) + "." + strconv.FormatUint(uint64(raw[3]), 10)
}
func Print_Info() func([]byte, int) {return print_info
}

测试主函数

func main() {fmt.Fprintln(os.Stderr, inet.Watch(inet.Print_Info()))
}

效果

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode: 889. 根据前序和后序遍历构造二叉树 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【Java程序设计】【C00280】基于Springboot的校友社交系统(有论文)

基于Springboot的校友社交系统&#xff08;有论文&#xff09; 项目简介项目简介项目获取开发环境项目技术运行截图 项目简介 项目简介 这是一个基于Springboot的校友社交系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页…

10.Halcon形态学膨胀,腐蚀,开运算,闭运算

膨胀:对边界点进行扩充,填充空洞&#xff0c;使边界向外部扩张的过程。 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 开运算: 先腐蚀后膨胀的过程称为开运算。 作用 : 去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积. 闭运…

企业级大数据安全架构(十一)Kerberos接入dophinscheduler

作者&#xff1a;楼高 建议将dophinscheduler集成到Ambari安装部署&#xff0c;在Ambari上面开启kerberos 1.安装准备 编译 从GitHub获取dolphinscheduler-1.3.9源码 git clone https://github.com/apache/dolphinscheduler.git -b 1.3.9-releasehttps://github.com/apache/…

解决Jenkins-2.396启动报错:Failed to start Jenkins Continuous Integration Server.

场景&#xff1a;现有环境已经使用Java 8在运行业务&#xff0c;安装Jenkins后启动报错。 原因&#xff1a;因为Jenkins-2.396 依赖于Java 11 版本才能启动。 解决方法&#xff1a; yum 安装Java11 yum install java-11-openjdk-devel java-11-openjdk 或者二进制安装java11修…

element导航菜单el-menu添加搜索功能

element导航菜单-侧栏&#xff0c;自带的功能没有搜索或者模糊查询。 找了找资料 找到一个比较可行的&#xff0c;记录一下&#xff1a; //index.vue的代码 <div style"overflow:auto"><el-menu :default-active"$route.path":default-openeds&…

如何让程序员过一个没有烦恼的假日

每逢假期、周末&#xff0c;总是被各种排障会和线上问题折磨&#xff0c;做什么都做不进去&#xff0c;也没法好好休息…… 常会听身边的同行们这样描述自己的假期。说实话&#xff0c;这感觉我可太熟悉不过了&#xff0c;因为这状态困扰了我好几年…… 不管你是正吃着火锅还是…

时域系统到频域响应的直观解析及数学推导

课本里经常有已知系统时域的差分方程&#xff0c;求系统的频率响应这样的题&#xff0c;老师会讲怎么带公式进去解决&#xff0c;怎么查表解决&#xff0c;但我们总时无法直观地理解这两种转换的特殊关联在哪里&#xff0c;这篇文章以FIR滤波器为例&#xff0c;不仅列出了课本里…

CHiME丨​MMCSG(智能眼镜多模态对话)

CHiME 挑战赛已经正式开启&#xff0c;今天分享下 CHiME 的子任务MMCSG(智能眼镜多模态对话)&#xff0c;欢迎大家投稿报名&#xff01; 赛事官网&#xff1a;https://www.chimechallenge.org/current/task3/index CHiME (Computational Hearing in Multisource Environments…

最新版opencv4.9安装介绍,基本图像处理详解

文章目录 一、什么是OpenCV &#xff1f;二. OpenCV 安装1. 下载地址2.安装命令&#xff1a;pip install opencv-python 三、图像基础1. 基本概念2. 坐标系3. 基本操作&#xff08;彩色图片&#xff09;&#xff08;1&#xff09;读取图片&#xff1a;cv2.imread( )&#xff08…

小程序--vscode配置

要在vscode里开发微信小程序&#xff0c;需要安装以下两个插件&#xff1a; 安装后&#xff0c;即可使用vscode开发微信小程序。 注&#xff1a;若要实现鼠标悬浮提示&#xff0c;则需新建jsconfig.json文件&#xff0c;并进行配置&#xff0c;即可实现。 jsconfig.json内容如…

vue3新特性-defineOptions和defineModel

defineOptions 背景说明&#xff1a; 有 <script setup> 之前&#xff0c;如果要定义 props, emits 可以轻而易举地添加一个与 setup 平级的属性。 但是用了 <script setup> 后&#xff0c;就没法这么干了 setup 属性已经没有了&#xff0c;自然无法添加与其平…

【Java程序设计】【C00278】基于Springboot的数码论坛管理系统(有论文)

基于Springboot的数码论坛管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的数码论坛系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、…

小程序生命周期解析(从概念、启动、运行、销毁到生命周期事件及场景的全面解析)

引言 在当今移动应用激烈竞争的时代&#xff0c;小程序作为一种轻量级、高效便捷的移动应用形式&#xff0c;逐渐成为用户和开发者的热门选择。小程序不仅以其小巧灵活的体积受到用户喜爱&#xff0c;更因为无需安装、即点即用的特性在移动应用领域取得了广泛的普及。随着小程…

三好夫人品牌喜获“爱你一万年.com”中文域名,开启数字化新篇章

三好夫人&#xff0c;以中文域名“爱你一万年.com”强化品牌情感联结&#xff0c;预示全新市场布局。 【北京&#xff0c;2024年2月23日讯】 —— 中国领先的旺夫养生茶品牌“三好夫人”今日宣布&#xff0c;成功注册“爱你一万年.com”中文域名&#xff0c;标志着公司在加强品…

亚马逊,速卖通,国际站测评补单的必要性与方法

亚马逊平台的规则与某宝有所不同。亚马逊平台没有产品推广引流和直通车等功能。而且&#xff0c;与某宝不同的是&#xff0c;亚马逊平台没有广告位和卖家客服。在某宝上&#xff0c;当我们选择款式和颜色时&#xff0c;通常会与卖家客服进行沟通。但在亚马逊上&#xff0c;没有…

深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】

深入探索pdfplumber&#xff1a;从PDF中提取信息到实际项目应用 在数据处理和信息提取的过程中&#xff0c;PDF文档是一种常见的格式。然而&#xff0c;要从PDF中提取信息并进行进一步的分析&#xff0c;我们需要使用适当的工具。本文将介绍如何使用Python库中的pdfplumber库来…

DataX - 全量数据同步工具

前言 今天是2024-2-21&#xff0c;农历正月十二&#xff0c;相信今天开始是新的阶段&#xff0c;尽管它不是新的周一、某月一日、某年第一天&#xff0c;尽管我是一个很讲究仪式感的人。新年刚过去 12 天&#xff0c;再过 3 天就开学咯&#xff0c;开学之后我的大学时光就进入了…

STM32控制max30102读取血氧心率数据(keil5工程)

一、前言 MAX30102是一款由Maxim Integrated推出的低功耗、高精度的心率和血氧饱和度检测传感器模块&#xff0c;适用于可穿戴设备如智能手环、智能手表等健康管理类电子产品。 该传感器主要特性如下&#xff1a; &#xff08;1&#xff09;光学测量&#xff1a;MAX30102内置…

2024生物发酵展带您领略视觉盛宴-东滤器材

参展企业介绍 东滤器材&#xff08;石家庄&#xff09;有限公司是一家专注于微孔膜产品、深层过滤产品、纳米纤维产品、一次性过滤产品开发和应用的高科技企业&#xff0c;并于2022年顺利通过河北省“高新技术企业”权威认证。 公司拥有近两千平米符合GMP规范的十万级净化车间…