Recent Posts
-
November 09, 2024
Wireguard Go 源码阅读至网络包处理流程
wireguard-go的代码结构很好。但一个网络包的处理流程中,可能经过很多channel处理,很多线程数据交换和竞争,感觉不太好啊。粗略看了一下 网络包的处理流程。main函数: device := device.NewDevice(tun, conn.NewDefaultBind(), logger) conn.NewDefaultBind() 是一个 bind conn.Bind 封装网络连接管理和底层的网络操作吧 device.NewDevice 函数里面...
-
August 02, 2024
Linux系统的efi启动盘的制作
参考https://wiki.archlinux.org/title/GRUB https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface https://wiki.archlinux.org/title/Partitioning#GUID_Partition_Table https://wiki.archlinux.org/title/EFI_system_partition1. 主板设置启动模式 UEFI...
-
July 31, 2024
Linux内核崩溃的持久化存储pstore
看到有个 /sys//fs/pstore 文件系统,找了一下,原来是把日志 存储到 内存的东西,类似kdump的原理。不过这个还支持blk 把崩溃日志写到 某磁盘分区的。persistent storage file system fs/pstore/pstoremount -t pstore pstore /sys//fs/pstore[root@localhost ]# find /root/rpmbuild//BUILD/kernel-5.14.0-427.24.1.el9_4/li...
-
July 21, 2024
Linux编程socket接收数据时返回网络包的附加信息比如时间戳和skb的mark 等
socket设置了SO_TIMESTAMP后,会在接收数据时通过put_cmsg往控制头上面写入信息吧,比如接收数据包的时间戳和skb的mark还有比如vlan id等 都是通过这个方式返回。/* * This is meant for all protocols to use and covers goings on * at the socket level. Everything here is generic. */int sk_setsockopt(struct sock *sk...
-
July 05, 2024
Golang接受ipv6组播包的例子
参考https://pkg.go.dev/golang.org/x/net/ipv6 , 可以用“ip maddress show dev enp0s8 “ 和 “cat /proc/net/igmp6 ” “ss -lnp” 等命令查看组播监听状态package mainimport ( // "os" "net" "fmt" "time" "golang.org/x/net/ipv6")func main() { ...
-
July 05, 2024
Linux的组播地址管理和网卡的组播混杂模式
linux内核源码https://elixir.bootlin.com/linux/latest/source/net/ipv6/addrconf.chttps://elixir.bootlin.com/linux/latest/source/net/ipv6/mcast.chttps://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/intel/e1000e/netdev.c从设置组播地址到设置网卡mac地址过滤白...
-
May 28, 2024
Tcpdump和af_packet编程只抓出去或者进来方向的包
抓包里面有时想区分抓到的包是从本机发送出去的,还是从外面进来的。有的交换机(还是别的设备)好像会把本机发送出去的arp请求又大量重新发送回来,关靠源mac看不出。这时tcpdump是有个参数指定抓包方向的。 -Q direction --direction=direction Choose send/receive direction direction for which packets should be captured. Possi...
-
May 11, 2024
Linux连接跟踪表的实现conntrack
我一直以为linux内核的conntrack是默认启动的,昨天才发现不是的。经过反复测试阅读源码才知道是“按需”启动的。通过反复测试和核对系统的 连接跟踪表,发现只有“ iptables -t nat -A POSTROUTING ” 创建了snat规则,这个ct才开始运行的。cat /proc/sys/net/netfilter/nf_conntrack_countconntrack -L -f ipv6conntrack -Lkprobe 给ipv4_conntrack_in 函数设...
-
May 04, 2024
Intel的cpu汇编bmi2指令集的pext指令和完美哈希函数
参考:https://www.chessprogramming.org/BMI2 https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=pext&ig_expand=5088 https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.htmlpext 指令是 “Parallel Bits Extract” 的意思, 作用就...
-
April 30, 2024
Gcc的128位整数__int128
根据gcc的文档 https://gcc.gnu.org/onlinedocs/gcc/extensions-to-the-c-language-family/128-bit-integers.html是有扩展支持__int128类型的,但默认会用 64位的整数了模拟出来。参考下面这两篇文章:“GCC扩展中的int128相关运算在底层是如何实现的?”https://www.zhihu.com/question/311373755“__int128 的安全使用”https://zhuanla...