自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

redwingz的博客

Linux内核网络、虚拟化

  • 博客(571)
  • 资源 (5)
  • 论坛 (1)
  • 收藏
  • 关注

原创 LDAP配置与测试

安装环境:$ cat /etc/issueUbuntu 20.10 \n \l安装ldap,当前版本为2.4.53:apt-get updateapt-get install slapd ldap-utils -y$ slapd -VV@(#) $OpenLDAP: slapd 2.4.53+dfsg-1ubuntu1.4 (Feb 18 2021 14:19:03) $ Ubuntu Developers <ubuntu-devel-discuss@lists.ub

2021-04-01 23:03:09 59 1

原创 IPv6转发开关

conf/all/forwarding配置全局的接口间IPv6报文转发,默认值为0,此值的修改将同时修改每个接口的forwarding配置项。接口目录下forwarding配置项对于接口的Host/Router行为,默认值为0,遵循以下主机行为:1)在邻居发现协议的Neighbour Advertisements报文中不设置IsRouter标志;2)如果accept_ra为真(默认值),可发送Router Solicitations报文;3)如果accept_ra为真(默认值),可接收Router

2021-03-30 22:37:14 75

原创 optimistic-dad

配置项optimistic_dad用于控制是否执行优化的DAD检查;配置项use_optimistic控制在源地址选择时,可使用optimistic地址,但是其优先级低于Preferred地址。如下函数ipv6_allow_optimistic_dad,命名空间和设备的optimistic_dad配置项有一个为真,就启用此功能。static bool ipv6_allow_optimistic_dad(struct net *net, struct inet6_dev *idev)

2021-03-23 22:28:44 61

原创 icmp攻击类型ping-of-death

某些协议栈对于分片报文,事先分配最大IP长度65536字节的缓冲区,而实际接收到的分片在重组时,超过65536的长度将导致缓冲区溢出错误。当前的各个协议栈实现早已修复此问题。以下程序用于发送超过65536的IP分片报文,首先是头文件部分:#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h&gt

2021-03-21 21:45:03 66

原创 ipv6设备的删除标记dead

在创建inet6_dev设备结构函数中,在分配了inet6_dev结构内存之后,如果出现邻居参数结构neigh_parms分配失败,或者snmp相关结构分配失败的情况,需要释放inet6_dev结构,直接返回错误。static struct inet6_dev *ipv6_add_dev(struct net_device *dev){ struct inet6_dev *ndev; ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL

2021-03-16 23:21:43 26

原创 IPv6地址DAD检测

DAD冲突检测和IPv6地址失效检测使用的都是addrconf_wq队列,其在addrconf_init函数中创建。int __init addrconf_init(void){ struct inet6_dev *idev; ... addrconf_wq = create_workqueue("ipv6_addrconf"); if (!addrconf_wq) { err = -ENOMEM; goto out_nowq;

2021-03-13 22:13:20 128

原创 clamav的unrar解压模块加载

clamav使用的unrar功能,是一个单独的模块,使用C++实现,编译完成之后生成两个so文件libunrar.so和libclamunrar_iface.so,由命名可知,前者为unrar功能的主体,而后者为封装的接口。在使用的时候,作为动态库进行加载。如下的configure变量,可指定unrar编译使用的编译器等参数。 CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker f

2021-03-11 22:42:33 36

原创 CLAMD检测到病毒的处理

可通过clamd配置文件/usr/local/etc/clamd.conf中的配置项VirusEvent进行定义,默认情况下未指定VirusEvent,变量v会替换为发现的病毒名称。# Execute a command when virus is found. In the command string %v will# be replaced with the virus name.# Default: no#VirusEvent /usr/local/bin/send_sms 12345678

2021-03-10 20:56:13 57

原创 TCP绑定套接口链表

内核中全局变量tcp_hashinfo的成员bhash保存有全局的bind套接口。bhash是以哈希值为索引的数组,其中inet_bhashfn函数负责依据端口号和命名空间生成哈希值。每个数组元素包含一个哈希值相同的inet_bind_bucket结构组成的链表(chain链表)。struct inet_hashinfo tcp_hashinfo;struct inet_hashinfo { ... /* Ok, let's try this, I give up, we do n

2021-03-09 21:40:21 59

原创 IPv6源地址选择

源地址的选择依据出接口、目的地址、label、参数prefs和地址类型scope等参数来确定,在函数ipv6_dev_get_saddr开始,先行将这些判断参数组织到结构ipv6_saddr_dst中。scores记录每个可选地址的得分,最终分数高的地址选为要使用的源地址。int ipv6_dev_get_saddr(struct net *net, const struct net_device *dst_dev, const struct in6_addr *daddr

2021-03-06 21:28:36 114

原创 RS请求报文控制

默认情况下router_solicitations值为-1,不限制RS的发送次数。如果其为正值,表示当发送到此数量的RS报文之后,还未收到响应,则认为当前链路不存在路由器。$ cat /proc/sys/net/ipv6/conf/all/router_solicitations-1$ cat /proc/sys/net/ipv6/conf/default/router_solicitations-1router_solicitation_interval规定RS报文的发送间隔,默认为4秒钟。r

2021-03-05 21:19:41 166

原创 接口token设置

如下ip命令所示,可设置接口的token值。# ip token set ::0102:0304 dev ens33 # # ip token list token ::1.2.3.4 dev ens33token :: dev ens34token :: dev ens35内核处理TOKEN添加如下inet6_set_iftoken函数,先检查合法性:对于环回loopback接口,或者不需要邻居地址的接口(设置了IFF_NOA

2021-03-04 21:33:35 141 1

原创 CLAMAV流检查接口

可使用clamdscan工具进行文件流的检查,核心处理函数为send_stream。如下分为四个步骤:首先,发送流检查命令字:"zINSTREAM"到clamd守护进程;发送文件内容,注意存放文件数据的缓存,其头部4个字节存放的是缓存中数据长度,网络字节序;发送4个字节的空数据到clamd,表示文件流发送完成;读取clamd的检测结果。static int send_stream(int sockd, const char *filename){ uint32_t buf[BUFSI

2021-03-03 21:11:42 1160 1

原创 IPv6隐私地址

RFC4941定义了IPv6的Privacy地址扩展,默认情况下,内核没有开启隐私地址,如下PROC文件use_tempaddr值为0。当use_tempaddr值大于0时,开启隐私地址功能。use_tempaddr值为1时,优先使用公开地址。而当use_tempaddr值大于1时,优先使用隐私地址。$ cat /proc/sys/net/ipv6/conf/all/use_tempaddr0$ cat /proc/sys/net/ipv6/conf/default/use_tempaddr0创

2021-03-02 21:20:56 114

原创 IPv6地址有效性检测

IPv6地址检测和DAD冲突检测使用的都是addrconf_wq队列,其在addrconf_init函数中创建。int __init addrconf_init(void){ struct inet6_dev *idev; ... addrconf_wq = create_workqueue("ipv6_addrconf"); if (!addrconf_wq) { err = -ENOMEM; goto out_nowq; }

2021-02-26 23:23:19 267

原创 IPv6地址自动配置

默认情况下,配置项autoconf都是1,即开启地址自动配置。$ cat /proc/sys/net/ipv6/conf/all/autoconf 1$ cat /proc/sys/net/ipv6/conf/default/autoconf 1$ cat /proc/sys/net/ipv6/conf/ens33/autoconf 1$ cat /proc/sys/net/ipv6/conf/all/accept_ra_pinfo1$ cat /proc/s

2021-02-24 23:41:48 184

原创 IPv6使能开关

默认情况下,IPv6是开启状态,即PROC文件disable_ipv6的值为零。$ cat /proc/sys/net/ipv6/conf/all/disable_ipv60$ cat /proc/sys/net/ipv6/conf/default/disable_ipv60$ cat /proc/sys/net/ipv6/conf/ens33/disable_ipv60如下代码所示,默认情况下all和default中的disable_ipv6配置值都为0。static struct ip

2021-02-23 22:05:01 111

原创 IPv6地址stable private

对于链路本地地址和自动配置地址,内核支持4种生成方式,默认情况下使用EUI64方式,可通过PROC文件:/proc/sys/net/ipv6/conf/ens33/addr_gen_mode进行修改。enum in6_addr_gen_mode { IN6_ADDR_GEN_MODE_EUI64, IN6_ADDR_GEN_MODE_NONE, IN6_ADDR_GEN_MODE_STABLE_PRIVACY, IN6_ADDR_GEN_MODE_RANDOM,}

2021-02-19 22:07:09 80

原创 clamav安装使用

clamav-0.103.1安装环境:$ cat /etc/issueUbuntu 20.04 LTS \n \l安装依赖库$ sudo apt-get install libssl-dev$ sudo apt-get install zlib1g zlib1g-dev$ sudo apt-get install libcurl4-openssl-dev$ sudo apt-get install libpcre3 libpcre3-dev下载clamav,配置选项–disable-cl

2021-02-18 21:33:33 422

原创 DAD报文控制

PROC文件accept_dad控制DAD(Duplicate Address Detection)报文的接收,内核中根据目录all和接口(ens33)名称目录下的accept_dad的两个值中的最大值来决定最终的值。accept_dad的取值有以下三个:0 - 关闭DAD1 - 开启DAD2 - 开启DAD,并且,在基于MAC地址的本地链路地址检测到冲突时,关闭IPv6功能。$ cat /proc/sys/net/ipv6/conf/all/accept_dad0$ cat /proc/sys

2021-02-09 22:18:24 216

原创 IPv6接口自动配置的地址数量

默认情况下,每个接口最大可自动配置16个地址。如下PROC文件max_addresses中的值,如果设置为0,将不限制地址数量。$ cat /proc/sys/net/ipv6/conf/all/max_addresses 16$ cat /proc/sys/net/ipv6/conf/default/max_addresses16$ cat /proc/sys/net/ipv6/conf/ens33/max_addresses 16ipv6_devconf和ipv6_devconf

2021-02-07 22:58:47 96

原创 IPv6设备配置选项

IPv6子系统中的三个全局配置:ipv6_devconf、ipv6_devconf_dflt和ipv6_defaults:static struct ipv6_devconf ipv6_devconf __read_mostly = { .forwarding = 0, .hop_limit = IPV6_DEFAULT_HOPLIMIT, ...}static struct ipv6_devconf ipv6_devconf_dflt __read_mostly

2021-02-06 21:49:52 91

原创 网桥本地链路组播控制group_fwd_mask

在创建网桥时,可指定组播转发掩码值group_fwd_mask,如下0xff00。掩码中的位表示的为链路本地地址(01:80:C2:00:00:0X)的最后一个4位的值,即X的值,其范围为0到15,所以,group_fwd_mask的值为16比特。网桥下的子接口可以设置自身的group_fwd_mask掩码值。$ sudo ip link add name br1 type bridge group_fwd_mask 0xff00$ $ cat /sys/devices/virtual/net/br

2021-02-04 23:02:27 117

原创 路由FIB通知链

在网络命名空间初始化时,初始化fib通知链操作链表。static int __net_init fib_notifier_net_init(struct net *net){ struct fib_notifier_net *fn_net = net_generic(net, fib_notifier_net_id); INIT_LIST_HEAD(&fn_net->fib_notifier_ops); ATOMIC_INIT_NOTIFIER_HEAD(&amp

2021-01-31 22:27:22 88

原创 命名空间设备地址标识dev_addr_genid

对于IPv4,在初始化时,为命名空间的设备地址标识赋于一个随机值。static __net_init int rt_genid_init(struct net *net){ atomic_set(&net->ipv4.rt_genid, 0); atomic_set(&net->fnhe_genid, 0); atomic_set(&net->ipv4.dev_addr_genid, get_random_int()); retu

2021-01-28 22:07:03 79

原创 命名空间接口序号dev_base_seq

网络命名空间初始化时,将序号dev_base_seq赋值为1。static __net_init int setup_net(struct net *net, struct user_namespace *user_ns){ /* Must be called with pernet_ops_rwsem held */ const struct pernet_operations *ops, *saved_ops; int error = 0; LIST_HEAD(net

2021-01-25 21:30:50 65

原创 多径路由选择

以函数ip_route_input_slow为例,在fib查询之后,由函数ip_mkroute_input创建路由缓存项。static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr, u8 tos, struct net_device *dev, struct fib_result *res){ err = fib_lookup(net, &fl4,

2021-01-05 22:05:24 150

原创 内核earlyprintk选项

通过设置early_printk选项,可以在内核串口设备初始化之前,看到打印输出,对于调试内核早期的启动问题非常有帮助。如下可在grub命令行中,手动加载启动内核,增加内核参数:grub> grub> linux \(hd0,msdos2)/vmlinuz earlyprintk=ttyS0,115200grub> grub> bootgrub> 对于x86平台,内核函数setup_early_printk处理earlyprintk选项,解析earlyprintk

2020-12-28 21:42:59 223

原创 rtnetlink组数量与设置

在文件include/uapi/linux/netlink.h中定义了,目前共有32个组,除去第一个RTNLGRP_NONE,即31个组。/* RTnetlink multicast groups */enum rtnetlink_groups { RTNLGRP_NONE,#define RTNLGRP_NONE RTNLGRP_NONE RTNLGRP_LINK,#define RTNLGRP_LINK RTNLGRP_LINK... RTN

2020-12-24 22:24:00 117

原创 rtnetlink的portid选择

在iproute2-5.9.0的文件lib/libnetlink.c中,创建netlink套接口时,地址结构sockaddr_nl,即rth->local没有对其成员nl_pid赋值,仅赋值了nl_family和nl_groups,由内核完成nl_pid的选取。int rtnl_open_byproto(struct rtnl_handle *rth, unsigned int subscriptions, int protocol){ memset(rth,

2020-12-20 20:40:29 101

原创 TCP合法RST报文

RESET报文的接收和检查处理。客户端握手阶段对于TCP客户端,在发送完SYN报文之后,如果接收到的回复报文同时设置了ACK和RST标志,在检查完ACK的合法性之后,处理RST标志,关闭套接口。对于ACK确认序号,其应当大于第一个未确认序号(snd_una),并且,确认序号不应大于未发送数据的序号(snd_nxt)。通常情况下ACK确认序号应当等于snd_una加一(SYN占用一个序号),但是,如果SYN报文中带有数据(例如:TFO),ACK确认序号会更大。以上情况向对端发送reset报文,但是,如果

2020-12-12 20:33:14 372

原创 TCP复位报文的发送

内核发送reset报文的函数为tcp_v4_send_reset,如下其赋值给了tcp_request_sock_ops结构的成员send_reset。struct request_sock_ops tcp_request_sock_ops __read_mostly = { .family = PF_INET, ... .send_reset = tcp_v4_send_reset,监听套接口不存在如下tcp_v4_rcv函数中,__inet_lookup_

2020-12-10 21:41:10 222

原创 X710网卡链路状态控制

驱动版本i40e-2.10.19.82,在ifconfig将网口down的时候,发现链路并没有断开,网卡的指示灯还是亮的。如下为控制网卡shutdown的函数:/** * i40e_down - Shutdown the connection processing * @vsi: the VSI being stopped **/void i40e_down(struct i40e_vsi *vsi){ int i; /* It is assumed that the call

2020-12-06 19:49:06 265

原创 iptables不能初始化filter表问题

错误如下所示:# iptables -Liptables v1.8.1 (legacy): can't initialize iptables table `filter': No chain/target/match by that namePerhaps iptables or your kernel needs to be upgraded.参考网上的说法,应该是filter表模块iptable_filter没有加载成功,或者内核编译选项根本就没有选上此功能。但是手动加载filter模块,没

2020-12-03 22:36:52 1002

原创 邻居表的proxy_qlen长度和proxy_delay延时参数

proxy_qlen控制邻居代理缓存的报文数量,proxy_delay定义处理需要代理的arp报文的时间间隔。对于arp协议,内核默认的proxy_qlen为64,proxy_delay为80。通过PROC文件proxy_qlen可查看和修改其值。$ cat /proc/sys/net/ipv4/neigh/ens33/proxy_qlen 64$ cat /proc/sys/net/ipv4/neigh/ens33/proxy_delay 80在arp邻居表arp_tbl中将NEIGH_VA

2020-11-24 22:52:23 157

原创 邻居表项的unres_qlen_bytes长度

对于每个未解析的邻居地址,变量unres_qlen和unres_qlen_bytes分别控制可换成的报文数量和报文字节数量,其中前者unres_qlen在内核linux-3.3版本已经废弃,应使用后一个变量unres_qlen_bytes,其默认值为SK_WMEM_MAX(即net.core.wmem_default),内核建议此值的设置应能够容纳256个中型长度的报文。通过PROC文件unres_qlen和unres_qlen_bytes可查看和修改其值。$ cat /proc/sys/net/ipv

2020-11-19 20:04:14 319

原创 邻居表项的回收控制

内核中存在3个阈值控制邻居表项的回收:gc_thresh1 表示最小可保留的表项数量,如果表项数量小于此值GC(Garbage collector)不进行回收操作,默认为128;gc_thresh2 当表项数量超过此值时,GC将会清空大于5秒的表项,默认为512;gc_thresh3 最大可允许的非永久表项数量。如果系统拥有庞大的接口数量,或者直连了大量的设备,应增大此值。默认值为1024。另外,gc_interval不太清楚有什么用处,默认值为30秒钟。对于IPv4,可通过以下PROC

2020-11-14 07:08:35 257

原创 邻居表项的retrans_time时长

retrans_time控制在发送过邻居地址探测报文之后,经过多长时间检测邻居表项的变化,如果检测不成功,进行重新探测,对于arp协议,内核默认的retrans_time为1秒钟。通过PROC文件retrans_time可查看和修改其值,单位时USR_HZ(100),PROC文件的内容为毫秒值,这里为默认的1000ms。$ cat /proc/sys/net/ipv4/neigh/ens33/retrans_time100$ cat /proc/sys/net/ipv4/neigh/ens33/re

2020-11-12 20:15:49 217

原创 邻居表项的ucast_solicit数量

ucast_solicit控制使用单播发送邻居地址探测报文的次数,对于arp协议,内核默认的ucast_solicit为3。通过PROC文件app_solicit可查看和修改其值,如下,修改为1。$ cat /proc/sys/net/ipv4/neigh/ens33/ucast_solicit 3 $ echo 1 > /proc/sys/net/ipv4/neigh/ens33/ucast_resolicit在arp邻居表arp_tbl中将NEIGH_VAR_UCAST_PROBES索

2020-11-10 20:35:31 233

原创 邻居表项的mcast_solicit数量

mcast_solicit和mcast_resolicit控制使用多播发送邻居地址探测报文的次数,对于arp协议,内核默认的mcast_solicit为3。通过PROC文件app_solicit可查看和修改其值,如下,修改为1。$ cat /proc/sys/net/ipv4/neigh/ens33/mcast_solicit 3 $ cat /proc/sys/net/ipv4/neigh/ens33/mcast_resolicit 0在arp邻居表arp_tbl中将NEIGH_VAR_MC

2020-11-05 22:24:44 203 2

WEB Portal 认证完整的交互报文

web认证交互报文,包括WLAN controller与portal server的认证与注销,AC与radius 服务器的认证报文。

2018-04-24

IKEv2-camellia.pcap

IKEv2协议使用camellia加密算法的协商报文,交互流程。

2019-10-28

IKEv2-rw-cert2.pcap

strongswan使用linux内核的af_alg加密接口配置,IKEv2协议交互报文。

2019-10-28

libssh2-1.8.0 and ssh2_batch example

ssh2_batch可执行程序,用于非交互式的ssh命令执行。源代码和libssh2

2018-06-13

botan-ed25519.pcap

IKEv2协议交互报文,认证方式选用Ed25519算法的证书方式。

2019-10-28

redwingz的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除