当前位置: 首页 > news >正文

零入门kubernetes网络实战-20->golang编程syscall操作tun设备介绍

《零入门kubernetes网络实战》视频专栏地址
https://www.ixigua.com/7193641905282875942

本篇文章视频地址(稍后上传)


本篇文章主要是使用golang自带的syscall包来创建tun类型的虚拟网络设备。

注意:

目前只能使用syscall包来创建tun类型的虚拟设备。

tun虚拟网卡设备的启动,IP配置,路由配置可能需要其他方式实现。

比方说通过netlink包方式来实现。

1、golang代码

package mainimport ("bytes""fmt""github.com/vishvananda/netlink""net""os""syscall""unsafe"
)const (tunDevice  = "/dev/net/tun"ifnameSize = 16
)type ifreqFlags struct {IfrnName  [ifnameSize]byteIfruFlags uint16
}func ioctl(fd int, request, argp uintptr) error {_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), request, argp)if errno != 0 {return fmt.Errorf("ioctl failed with '%s'", errno)}return nil
}func fromZeroTerm(s []byte) string {return string(bytes.TrimRight(s, "\000"))
}func OpenTun(name string) (*os.File, string, error) {tun, err := os.OpenFile(tunDevice, os.O_RDWR, 0)if err != nil {fmt.Printf("----OpenTun----err:%v\n", err.Error())return nil, "", err}var ifr ifreqFlagscopy(ifr.IfrnName[:len(ifr.IfrnName)-1], []byte(name+"\000"))ifr.IfruFlags = syscall.IFF_TUN | syscall.IFF_NO_PIerr = ioctl(int(tun.Fd()), syscall.TUNSETIFF, uintptr(unsafe.Pointer(&ifr)))if err != nil {fmt.Printf("----OpenTun---ioctl----err:%v\n", err.Error())return nil, "", err}// 1,表示,程序结束后,创建的tun设备依旧在。// 默认为0,程序结束后,创建的tun设备就自动删除了err = ioctl(int(tun.Fd()), syscall.TUNSETPERSIST, 1)if err != nil {fmt.Printf("----OpenTun---ioctl---persist---err:%v\n", err.Error())return nil, "", err}ifname := fromZeroTerm(ifr.IfrnName[:ifnameSize])return tun, ifname, nil
}func configureIface(ifname string, ipn *net.IPNet, mtu int) error {iface, err := netlink.LinkByName(ifname)if err != nil {return fmt.Errorf("failed to lookup interface %v", ifname)}err = netlink.AddrAdd(iface, &netlink.Addr{IPNet: ipn, Label: ""})if err != nil {return fmt.Errorf("failed to add IP address %v to %v: %v", ipn.String(), ifname, err)}err = netlink.LinkSetMTU(iface, mtu)if err != nil {return fmt.Errorf("failed to set MTU for %v: %v", ifname, err)}err = netlink.LinkSetUp(iface)if err != nil {return fmt.Errorf("failed to set interface %v to UP state: %v", ifname, err)}err = netlink.RouteAdd(&netlink.Route{LinkIndex: iface.Attrs().Index,Scope:     netlink.SCOPE_UNIVERSE,Dst:       ipn,})if err != nil && err != syscall.EEXIST {return fmt.Errorf("failed to add route (%v -> %v): %v", ipn.String(), ifname, err)}return nil
}func main() {tun, fname, err := OpenTun("flannel-test")if err != nil {fmt.Printf("----Create--Tun------err:%v\n", err.Error())return}fmt.Printf("-----create---tun---name:%v\tfname:%v\n", tun.Name(), fname)_, ipn, _ := net.ParseCIDR("10.244.1.0/24")configureIface(fname, ipn, 1500)//time.Sleep(time.Hour)
}

在这里插入图片描述

2、本地编译

Makefile

build:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goscp:scp main root@10.211.55.122:/rootall:make build && make scp

在这里插入图片描述

3、远程服务器测试

route -n
å
ip a s | grep 10.211ip link sh flannel-test./main ip link sh flannel-testip a sh flannel-testroute -n

在这里插入图片描述

ip tuntap listethtool -i flannel-testethtool -i eth0

在这里插入图片描述

4、测试虚拟网卡flannel-test的连通性

在这里插入图片描述

5、/dev/net/tun: not pollable

在这里插入图片描述

read /dev/net/tun: not pollable

其实,曾经还出现过,此代码存在的情况下,也会报上面的错误。

可惜,已经不知道如何恢复异常场景了。


点击 下面 返回 专栏目录

<<零入门kubernetes网络实战>>技术专栏之文章目录

相关文章:

零入门kubernetes网络实战-20->golang编程syscall操作tun设备介绍

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是使用golang自带的syscall包来创建tun类型的虚拟网络设备。 注意&#xff1a; 目前只能使用syscall包来创建tun类型的虚拟设备。 tun虚拟网…...

springboot之自动配置

文章目录前言一、配置文件及自动配置原理1、配置文件2、yaml1、注解注入方式给属性赋值2、yaml给实体类赋值3、Properties给属性赋值二、springboot的多环境配置四、自动配置总结前言 1、自动装配原理 2、多种方式给属性赋值 3、多环境配置 4、自动配置 一、配置文件及自动配置…...

wxpython设计GUI:wxFormBuilder工具常用布局结构介绍之布局四—面板拼接式

python借助wxFormBuilder工具搭建基础的GUI界面—wxFormBuilder工具使用介绍&#xff1a;https://blog.csdn.net/Logintern09/article/details/126685315 布局四&#xff1a;面板拼接式&#xff0c;先Panel面板构图&#xff0c;再使用程序代码在Frame框架上拼接面板 下面讲一下…...

全网最全之接口测试【加密解密攻防完整版】实战教程详解

看视频讲的更详细&#xff1a;https://www.bilibili.com/video/BV1zr4y1E7V5/? 一、对称加密 对称加密算法是共享密钥加密算法&#xff0c;在加密解密过程中&#xff0c;使用的密钥只有一个。发送和接收双方事先都知道加密的密钥&#xff0c;均使用这个密钥对数据进行加密和解…...

Python - 目录文件(OS模块) 常用操作

目录os模块的方法os.path()模块的方法使用示例示例一&#xff1a;简单使用示例二&#xff1a;获取文件夹下指定条件的文件os模块的方法 方法说明os.listdir(path)取得指定文件夹下的文件列表os.mkdir(path)创建一个名为path的文件夹os.open(file, flags)打开一个文件&#xff…...

把本地代码初始化到远程git仓库

本地代码&#xff0c;推送到远程的git仓库。第一种方法第一步&#xff1a;建立远程的git仓库第二步&#xff1a;拉取git仓库到本地第三步&#xff1a;将本地代码复制到本地的git拉下来的文件夹中第四步&#xff1a;代码提交即可git add . --> git commit -m 初始化 --> g…...

关于angular中的生命周期函数

生命周期函数&#xff0c;也叫生命周期钩子。 Angular的每个组件&#xff08;包括根组件和子组件&#xff09;都存在一个生命周期&#xff0c;从创建、更新、到销毁&#xff0c;Angular提供组件生命周期钩子函数&#xff0c; 组件的生命周期从实例化组件类并渲染组件视图及其…...

【拼图】拼图游戏-微信小程序开发流程详解

还记得小时候玩过的经典拼图游戏吗&#xff0c;上小学时&#xff0c;在路边摊用买个玩具&#xff0c;是一个正方形盒子形状&#xff0c;里面装的是图片分割成的很多块&#xff0c;还差一块&#xff0c;怎么描述好呢&#xff0c;和魔方玩具差不多&#xff0c;有没有听说叫二维的…...

第六章 opengl之光照(颜色)

OpenGL光照颜色创建一个光照场景光照 颜色 颜色由RGB组成&#xff0c;分别是红色&#xff0c;绿色&#xff0c;蓝色。举例定义一个颜色向量&#xff1a; glm::vec3 coral(1.0f, 0.5f, 0.31f);而在现实中&#xff0c;人眼看到的是 物体反射后的颜色&#xff0c;也就是说不能被…...

C语言-基础了解-19-C位域

C位域 一、C位域 如果程序的结构中包含多个开关量&#xff0c;只有 TRUE/FALSE 变量&#xff0c;如下&#xff1a; struct {unsigned int widthValidated;unsigned int heightValidated; } status;这种结构需要 8 字节的内存空间&#xff0c;但在实际上&#xff0c;在每个变…...

MapReduce全排序和二次排序

排序是MapReduce框架中最重要的操作之一。MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序&#xff0c;而不管逻辑上是否需要。默认排序是按照字典顺序排序&#xff0c;且实现该排序的方法是快速排序。对于MapTask…...

【Vue3】封装数字框组件

数量选择组件-基本结构 &#xff08;1&#xff09;准备基本结构 <script lang"ts" setup name"Numbox"> // </script> <template><div class"numbox"><div class"label">数量</div><div cla…...

C++-简述strcpy、sprintf 和 memcpy 的区别

回答如下&#xff1a; strcpy 函数&#xff1a;用于将一个字符串&#xff08;以 NULL 结尾&#xff09;从源地址复制到目标地址。函数原型为 char* strcpy(char* destination, const char* source)。需要注意的是&#xff0c;该函数会复制整个字符串&#xff0c;包括 NULL 终止…...

用CPU大法忽悠ChatGPT写前端,油猴子工具库+1

文章目录用CPU大法忽悠ChatGPT写前端&#xff0c;油猴子工具库1源起对话1. 作为一名天才js程序员&#xff0c;开发一个油猴子脚本&#xff0c;实现所有浏览器网页的自动下滑功能&#xff0c;每一个步骤都加上中文注释2. 加一个按钮&#xff0c;只有我点击了按钮才会开始自动下滑…...

初识虚拟DOM渲染器

初识虚拟DOM渲染器什么是虚拟DOM什么是渲染器渲染器的实现组件是什么什么是虚拟DOM 首先简单说一下什么是虚拟DOM&#xff0c;虚拟DOM就是一个描述真实DOM的JS对象 例如&#xff1a; 真实的DOM元素 <div onClick"alert(click me)">click me</div>可以…...

工作日志day03

同时构建静态和动态库 //如果用这种方式&#xff0c;只会构建一个动态库&#xff0c;虽然静态库的后缀是.a ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC}) //修改静态库的名字&#xff0c;这样是可以的&#xff0c;但是我们往往希望他…...

【数据挖掘与商务智能分析】第三章 线性回归模型

一元线性回归 一元线性回归的代码实现 1. 绘制散点图 import matplotlib.pyplot as plt X = [[1], [2], [4], [5]] Y...

iOS开发之UIStackView基本运用

UIStackView UIStackView是基于自动布局AutoLayout&#xff0c;创建可以动态适应设备方向、屏幕尺寸和可用空间的任何变化的用户界面。UIStackView管理其ArrangedSubview属性中所有视图的布局。这些视图根据它们在数组中的顺序沿堆栈视图的轴排列。由axis, distribution, align…...

【java】为什么 main 方法是 public static void ?

main 方法是我们学习Java编程语言时知道的第一个方法&#xff0c;你是否曾经想过为什么 main 方法是 public、static、void 的。当然&#xff0c;很多人首先学的是C和C&#xff0c;但是在Java中main方法与前者有些细微的不同&#xff0c;它不会返回任何值&#xff0c;为什么 ma…...

最简单的线性回归模型-标量

首先考虑yyy为标量&#xff0c;www为标量的情况&#xff0c;那么我们的线性函数为ywxbywxbywxb。每批输入的量batch size 为111&#xff0c;每批输入的xxx为一个标量&#xff0c;设为x∗x^*x∗&#xff0c;标签yyy同样为一个标量&#xff0c;设为y∗y^*y∗。因此每批训练的损失…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点&#xff1a; 共 6 个字段&#xff1a; Year&#xff08;年&#xff09;Month&#xff08;月&#xff09;Day&#xff08;日&#xff09;Hour&#xff08;小时&#xff09;Minute&#xff08;分钟&#xff09;Second&#xff08;秒&#xff09; 表示…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...