首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏云计算与大数据

    Linux Netlink

    与之前应用程序和内核之间的通信选项相比,要使用 netlink 添加新协议,只需向 netlink.h 添加一个常量,然后内核和应用程序就可以立即通过基于套接字的 API 进行通信。 socket is a duplex socket. netlink 的最初目标是提供一种更好的方式来修改网络相关设置以及在用户空间和内核之间传输网络相关信息。 重要的是,用户空间和内核之间的通信是双向的,或者说 netlink 套接字是双工套接字。 最初作为中继和修改网络相关信息的更有效手段,现已成为通过 NETLINK_GENERIC 的通用内核和用户空间通信结构。 使用 ioctl 发送和接收消息的简单性消失了,netlink 本身是一个更复杂的消息系统——特别是在构建消息本身方面。

    1.5K10编辑于 2023-03-18
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析netlink

    https://github.com/vishvananda/netlinknetlink 是 Linux 系统里用户态程序、内核模块之间的一种 IPC 方式,特别是用户态程序和内核模块之间的 例如想在golang代码中实现ip link add xx的效果,一种办法是使用exec包执行对应的ip命令,另一种是采用netlink的方式,但是自己操作netlink还是有点繁琐。 netlink 包为 go 提供了一个简单的 netlink 库。Netlink 是 linux用户态程序用来与内核通信的接口。它可用于添加和删除接口、设置 ip 地址和路由以及配置 ipsec。 ("lo") addr, _ := netlink.ParseAddr("169.254.169.254/32") netlink.AddrAdd(lo, addr) } package main import ( "fmt" "github.com/vishvananda/netlink" ) func main() { la := netlink.NewLinkAttrs(

    1.3K10编辑于 2022-08-03
  • 来自专栏全栈程序员必看

    linux netlink套接字学习资料

    理论: http://blog.csdn.net/unbutun/article/details/3394061 进一步深入: Netlink编程-用户主动发起会话 http://edsionte.com > #include <linux/inet_diag.h> #include <netinet/tcp.h> #define NETLINK_TEST 18 #define MAX_PAYLOAD () with %s\n", err_no, line, str, strerror(errno)); } int main() { int sock_fd; sock_fd = socket(PF_NETLINK , SOCK_RAW, NETLINK_TEST); if (sock_fd < 0) { eprint(errno, "socket", __LINE__); return errno; } 即依次对其封装的两个数据结构初始化:struct req r;//自己定义协议数据结构 使用netlink进行用户进程和内核的数据交互时 用到r.nlh.nlmsg_len = NLMSG_SPACE

    1.5K10编辑于 2022-07-10
  • 来自专栏黑光技术

    内核通信之 Netlink 源码分析和实例分析

    前言 这几天在看 ipvs 相关代码的时候又遇到了 netlink 的事情,所以这两天花了点时间重新把 netlink 的事情梳理了一下。 目前 netlink 的这种机制被广泛使用在各种场景中,在 Linux 内核中使用 netlink 进行应用与内核通信的应用很多; 包括:路由 daemon(NETLINK_ROUTE),用户态 socket 协议(NETLINK_USERSOCK),防火墙(NETLINK_FIREWALL),netfilter 子系统(NETLINK_NETFILTER),内核事件向用户态通知(NETLINK_KOBJECT_UEVENT netlink 内核代码走读 netlink 内核相关文件介绍 netlink 的内核代码在内核代码的 net/netlink/ 目录下,我目前看的是 5.7.10 的内核版本,netlink 内核相关的文件不多 af_netlink.h: 是 netlink 的核心文件,这个也是下面详细走读的内容。

    3.8K31发布于 2020-07-31
  • 来自专栏人人都是架构师

    Go每日一库之118:netlink(内核通信)

    什么是netlinknetlink 是 Linux 系统里用户态程序、内核模块之间的一种 IPC 方式,特别是用户态程序和内核模块之间的 IPC 通信。 例如想在golang代码中实现ip link add xx的效果,一种办法是使用exec包执行对应的ip命令,另一种是采用netlink的方式,但是自己操作netlink还是有点繁琐。 golang netlink库 给大家推荐下https://github.com/vishvananda/netlink,使得在golang中使用netlink变的简单,对程序员小伙伴很友好。 netlink 包为 go 提供了一个简单的 netlink 库。Netlink 是 linux用户态程序用来与内核通信的接口。它可用于添加和删除接口、设置 ip 地址和路由以及配置 ipsec。 = "foo" mybridge := &netlink.Bridge{LinkAttrs: la} err := netlink.LinkAdd(mybridge) if err

    2.4K30编辑于 2023-09-30
  • 来自专栏用户10025783的专栏

    Linux用户空间与内核空间通信(Netlink通信机制)

    一,什么是Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。 只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。 那么Netlink有什么优势呢? Netlink协议基于BSD socket和AF_NETLINK地址簇(address family),使用32位的端口号寻址(以前称作PID),每个Netlink协议(或称作总线,man手册中则称之为 以下是几种预定义的协议类型: NETLINK_ROUTE, NETLINK_FIREWALL, NETLINK_APRD, NETLINK_ROUTE6_FW。 (2) unit:表示netlink协议类型,如NETLINK_TEST、NETLINK_SELINUX。 (3) groups:多播地址。

    6K10编辑于 2022-10-25
  • 来自专栏绿盟科技研究通讯

    注意-polaris僵尸网络正在攻击全球Netlink路由器

    图3.1 Netlink路由器开放端口情况(最近3个月累计数据) 暴露的Netlink路由器厂商分析情况如图 3.2 所示,因为Netlink是印度厂商,所以印度地区暴露数量最多也合乎情理。 图3.3 Web服务存活Netlink路由器开放端口情况(4月2日) Web服务存活的Netlink资产的国家分布(图 3.4 )和累计的资产分布(图 3.2 )对比可知,印度的存活资产相对历史资产差距最大 图3.4 Web服务存活Netlink路由器国家分布情况(4月2日) 四、威胁分析 1时间线 2020年3月18日 ExploitDB公布了一个Netlink GPON路由器的RCE漏洞利用。 3个别攻击源 我们发现在验证Netlink漏洞的初期,部分主机除了探测Netlink漏洞外,还探测了其他漏洞: 194.180.224.249:该主机位于美国,我们发现该主机除针对Netlink进行攻击外 因而,我们推测在3月18日ExploitDB公布Netlink GPON路由器RCE之前,已经有一批Netlink GPON路由器被攻陷并用于DDoS攻击,尽管没有证据表明这两次攻击与本文的发现有关,但也应引起大家的重视

    1.8K30发布于 2020-04-26
  • 来自专栏全栈程序员必看

    ctk编译linux,CTK插件框架学习5-插件间通信(Netlink实现热拔插监控)

    本章来写一个插件,插件功能为通过NETLINK读取linux系统中的hotplug信息,比如usb、SD卡、磁盘等设备的插拔事件产生的信息,将读到的信息通过插件间通信的方式发出。 在HotplugDetect类程序中,首先打开一个数据报socket,协议簇设置为AF_NETLINK,protocol为NETLINK_KOBJECT_UEVENT,代码如下。 2048; int ret; struct sockaddr_nl snl; bzero(&snl, sizeof(struct sockaddr_nl)); snl.nl_family = AF_NETLINK ; snl.nl_pid = getpid(); snl.nl_groups = 1; socket_fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT

    2.1K20编辑于 2022-09-02
  • 来自专栏菲宇

    keepalived实现Tomcat服务双机热备

    reflector reports IP 10.10.195.53added Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Netlink Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added Sep 29 15 :49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added Sep 29 15:49:16 shr reflector Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Registering Kernel netlink command channel Sep Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering Kernel netlink reflector Sep 29 15:46:25

    1.3K30发布于 2019-06-12
  • 来自专栏linux驱动个人学习

    udev实现热插拔

    答案是通过netlink socket通讯,在内核和用户空间之间传递信息。 Netlink是面向数据包的服务,为内核与用户层搭建了一个高速通道,是udev实现的基础。 套接字,该函数原型在netlink.h有定义,其类型是表示往用户空间发送消息的NETLINK_KOBJECT_UEVENT,groups=1,由于uevent只往用户空间发送消息而不接受,因此其输入回调函数 (net, NETLINK_KOBJECT_UEVENT, 1, NULL, NULL, THIS_MODULE); 当有事件发生的时候,调用 kobject_uevent()函数,实际上最终是调用 netlink_broadcast_filtered 或者PF_NETLINK,套接字type选择SOCK_RAW或者SOCK_DGRAM,Netlink协议并不区分这两种类型,第三个参数协议填充NETLINK_KOBJECT_UEVENT表示接收内核uevent

    3.3K50发布于 2018-03-07
  • 来自专栏北京马哥教育

    keepalived 实现 Tomcat 服务双机热备

    reflector reports IP 10.10.195.53added Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Netlink Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added Sep 29 15 :49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added Sep 29 15:49:16 shr Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering Kernel netlink reflector Sep 29 15:46:25 Oct 14 13:25:11 server1Keepalived_vrrp[30890]: Netlink reflector reports IP 10.10.195.212 removed

    62400发布于 2018-07-31
  • 来自专栏北京马哥教育

    keepalived 实现 Tomcat 服务双机热备

    reflector reports IP 10.10.195.53added Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Netlink Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added Sep 29 15 :49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added Sep 29 15:49:16 shr Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering Kernel netlink reflector Sep 29 15:46:25 Oct 14 13:25:11 server1Keepalived_vrrp[30890]: Netlink reflector reports IP 10.10.195.212 removed

    1K20发布于 2018-09-28
  • 来自专栏向治洪

    Android热插拔事件处理详解

    ue_sk)   return -ENOMEM;       ue_sk->sk = netlink_kernel_create(net, NETLINK_KOBJECT_UEVENT,   netlink_kernel_create函数原型: struct sock *netlink_kernel_create(struct net *net, int unit, unsigned int 默认情况下都是使用init_net这个全局变量        2) int unit: 表示netlink协议类型,如 NETLINK_KOBJECT_UEVENT        3)  unsigned netlink socket时,该input函数指针就会被调用。 它在函数netlink_proto_init中被初始化,向nl_table[sk->sk_protocol].mc_list中增加sock的调用流程如下(kernel/net/netlink/af_netlink.c

    6K81发布于 2018-02-05
  • 来自专栏Linux云计算网络

    Linux用户态与内核态通信的几种方式

    (关于 Linux 用户态和内核态可以参考 xx) 除此之外,还有以下四种方式: procfs(/proc) sysctl(/proc/sys) sysfs(/sys) netlink 套接口 procfs netlink netlink 是 Linux 用户态与内核态通信最常用的一种方式。Linux kernel 2.6.14 版本才开始支持。 /netlink.h> netlink_socket = socket(AF_NETLINK, socket_type, netlink_family); netlink 这种灵活的方式,使得它可以用于内核与多种用户进程之间的消息传递系统 引申: net-tools 工具通过 procfs(/proc) 和 ioctl 系统调用去访问和改变内核网络参数配置,而 iproute2 则通过 netlink 套接字接口与内核通信,前者已经被淘汰了 总结 Linux 用户态和内核态通信主要的四种方式,其中 netlink 和 procfs 是最常见的方式。 ----

    7.3K52发布于 2019-07-02
  • 来自专栏全栈程序员必看

    ipset如何与netfilter内核模块进行通信

    ", .description = "Initial revision", }; // 三、netlink套接字初始化 想使用netlink套接字,必然要先创建netlink套接字,应该有如下代码 skfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_TEST); 但是我并没有在ipset源代码中查找到。 handle) return NULL; handle->h = mnl_socket_open(NETLINK_NETFILTER); if (! 类型,创建netlink套接字 mnl_socket_bind绑定进程pid,此处传递的是MNL_SOCKET_AUTOPID mnl_socket_get_portid 通过给定的netlink套接字获取 netlink端口id 四、通过netlink函数和内核态进行交互 在同一个文件mnl.c中发现ipset_mnl_query函数,其中调用了mnl_socket_recvfrom和mnl_socket_sendto

    1.8K30编辑于 2022-11-08
  • 来自专栏小工匠聊架构

    高可用 - 03 Keepalived_ Keepalived工作原理&体系结构

    文章目录 Pre Keepalived工作原理 网络层 传输层 应用层 Keepalived的体系结构 内核空间 IPVS NETLINK模块 用户空间 Core components - WatchDog 内核空间 内核空间层处于最底层,它包括IPVS和NETLINK两个模块。 IPVS IPVS模块是Keepalived引入的一个第三方模块,通过IPVS可以实现基于IP的负载均衡集群。 ---- NETLINK模块 NETLINK模块主要用于实现一些高级路由框架和一些相关的网络功能,完成用户空间层Netlink Reflector模块发来的各种网络请求。 ---- Core components - Netlink Reflector Netlink Reflector用来实现高可用集群中故障转移时虚拟IP(VIP)的设置和切换。 Netlink Reflector的所有请求最后都发送给内核空间的NETLINK模块来完成。

    63021编辑于 2023-02-23
  • 来自专栏虚拟化笔记

    ovs vxlan实现代码分析

    ovs-vswitchd main线程一直while处理ovsdb-server变化和ovs-appctl命令,ovs-vsctl创建一个ovs vxlan port,最终调用到了dpif_netlink_port_add 用netlink发送给内核,是不是和ip link add道理一样。 dpif_netlink_port_add └─dpif_netlink_rtnl_port_create_and_add └─dpif_netlink_rtnl_port_create ├─dpif_netlink_rtnl_create | └─dpif_netlink_rtnl_create//注意这个RTM_NEWLINK和IFF_UP └─dpif_netlink_port_add__//通知内核ovs添加vxlan_vport 内核ovs模块初始化,内核处理ovs route netlink发送来的添加vxlan

    2K30发布于 2021-02-24
  • 来自专栏程序猿的那点事

    Android 11 WiFi扫描流程梳理

    _->GetFamilyId(), NL80211_CMD_TRIGGER_SCAN, netlink_manager_->GetSequenceNumber(), SendMessageInternal(packet, sync_netlink_fd_.get())) { return false; } // Polling netlink socket struct pollfd netlink_output; memset(&netlink_output, 0, sizeof(netlink_output)); netlink_output.fd = sync_netlink_fd_.get(); netlink_output.events = POLLIN; uint32_t sequence = packet.GetMessageSequence send(fd, data.data(), data.size(), 0)); if (bytes_sent == -1) { PLOG(ERROR) << "Failed to send netlink

    5K51发布于 2021-07-21
  • 来自专栏七夜安全博客

    反弹shell-逃逸基于execve的命令监控(上)

    在内核态,一般是通过三种办法来监控: Netlink Connector Audit Hook execve syscall (1) Netlink Connector 在介绍 Netlink Connector 之前,首先了解一下 Netlink 是什么,Netlink 是一个套接字家族(socket family),它被用于内核与用户态进程以及用户态进程之间的 IPC 通信,ss命令就是通过 Netlink Netlink Connector 是一种 Netlink ,它的 Netlink 协议号是NETLINK_CONNECTOR,其代码位于: https://github.com/torvalds/linux 在用户态实现轻量级ncp(netlink connector process)应用程序接收netlink进程事件消息 优点: 轻量级,在用户态即可获得内核提供的信息。 内核中的 kauditd 通过 Netlink 获取到规则并加载。

    3.5K20发布于 2019-12-26
  • 来自专栏呱牛笔记

    靠谱的SeLinux强制访问控制技术

    用于控制审核的Netlink套接字 netlink_dnrt_socket 用于控制DECnet路由的Netlink套接字 netlink_firewall_socket 用于创建用户空间防火墙过滤器的 Netlink套接字 netlink_ip6fw_socket 用于创建用户空间防火墙过滤器的Netlink套接字 netlink_kobject_uevent_socket 用于创建用户空间接收内核事件通知的 Netlink套接字 netlink_route_socket 用于控制和管理网络资源如路由表和IP地址的Netlink套接字 netlink_selinux_socket 用于接收策略载入通知,强制模式切换和清空 AVC缓存的Netlink套接字 netlink_tcpdiag_socket 用于监视TCP连接的Netlink套接字 netlink_soecket 所有其它的Netlink套接字 netlink_xfrm_socket 用于获取、管理和设置 IPsec 参数的 Netlink 套接字 node 代表一个 IP 地址或一段 IP 地址的主机 packet_socket 协议在用户空间执行的原始套接字 rawip_socket

    1.8K10编辑于 2023-05-02
领券