Recent Posts
-
August 12, 2022
Nft使用sets匹配源ip和目的ip的方法 可以取代ipset
nftables的sets比ipset iptables这些灵活一些,但感觉也复杂了一些。nft list rulesetnft list tablesnft list table ip natnft flush table ip example_tablenft delete table ip example_tablenft add table inet example_tablenft add set inet example_table example_set '{ type ...
-
August 07, 2022
Ffmpeg下载m3u8视频和合并加密ts视频流
```textexport http_proxy="http://127.0.0.1:8000" # 使用代理/d/ffmpeg-5.0.1-full_build/bin/ffmpeg.exe -i 'http://.../playlist.m3u8' -c copy output.mp4 下载视频流但有的网站m3u8单独下载不了,可能有cookie之类的校验,只能在浏览器里面下载m3u8文件。m3u8是一个列表,包含多个ts文件, 单独下载ts文件下来,然后使用下面的命令合并成mp...
-
July 22, 2022
Socket的ip_freebind选项可以提前绑定一个本机不存在的ip
启用这个选项后,可以绑定一个本机不存在的ip。 int freebind = 1; setsockopt(sockfd, IPPROTO_IP, IP_FREEBIND, &freebind, sizeof(freebind));
-
July 15, 2022
Linux内核的tcp和udp接受函数和无效socket丢包统计
tcp_v4_rcv { // tcp的接函数lookup: sk = __inet_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), th->source, th->dest, sdif, &refcounted); if (!sk) goto no_tcp_socket;no_tcp_socket: drop_reason = SKB_DROP_REASON_NO_SOCKET; ...
-
July 12, 2022
Linux的c程序和动态链接库的初始化函数类似golang里面的init函数
dlopen 支持_init函数的 https://man7.org/linux/man-pages/man3/dlopen.3.html不过现在建议使用gcc的constructor attribute,像下面这样定义,xxxx_init 会在初始化阶段dlopen返回之前被调用,和main入口之前被调用吧 destructor 函数void __attribute__((constructor)) xxxx_init(void);void __attribute__((destruct...
-
July 12, 2022
Iconv的gb2312和utf8编码转换
GBK 兼容 GB2312, 都兼容Ascii 。如果一个utf-8字符串的所有字节都小于128那就是ASCII 不需要转换了吧,#include <stdio.h>#include <stdlib.h>#include <string.h> #include <iconv.h>int encoding_convert(const char *tocode, const char *fromcode, ...
-
July 11, 2022
Awk打印不在第二个文件里面内容
去重 相当于 sort | uniqawk '!x[$0]++ 1.txt求第二列的平均值,每隔360项打印一次awk '{ s += $2; if (NR % 360 == 0) { print s/360; s = 0;}}' 1.txt下面语句打印第二个文件不出现在第一个文件中的第一列 第一个文件 NR 等于 FNR(file NR),awk 'NR==FNR{a[$0]++;next}NR!=FNR{if(!a[$0])print $0}' test1.txt test2.txt
-
June 29, 2022
Glibc默认发送aaaa类型ipv6地址的dns查询和程序5秒卡顿的现象
发现 nslookup www.baidu.com curl https://www.baidu.com 经常5秒才会返回,但nslookup其实很快就返回了A类型的ipv4地址了。 自己抓包发现是, 默认会发送 A 和AAAA这两种类型的 dns查询,AAAA 类型的响应慢或者无响应导致的,可能有些dns代理缓存对 AAAA类型支持不好导致,还挺常见的。但AAAA类型查询用不上,但却禁止不了,linux下面禁用ipv6这些都没有用。这个好像是glibc的默认行为,并没有设置可以禁止...
-
June 27, 2022
Bash脚本里面 command substitution 语法执行函数设置的环境变量不会被应用
ouput=$(command) # 执行命令,把输出赋值给output变量 output=$(func1 parm1) # 执行函数,把输出赋值给output变量这种 Command Substitution 是在 “ subshell environment‘ 里面执行, 估计是在子进程还是什么环境里面执行的,所以设置的环境变量 不会被当前环境继承。 只能改成 不用这种方式执行函数了,直接func1 parm1 调用,然后子啊func1里面使用全局变量来传递返回值...
-
May 13, 2022
Linux内核模块申请huge page内存
vmalloc好像被改造成自动申请huge page了,后面还增加一个vmalloc_no_huge函数,但好像引入了一些问题,有的开发者还想增加一个module_alloc_huge函数不知道最后会不会增加进去。https://lwn.net/Articles/892743/ The BPF allocator runs into trouble