Recent Posts
-
July 07, 2020
Perl的flock文件锁单实例运行
bash有个flock的命令,perl里面好像也有一个 flock函数,就对应c语言的flock函数的吧。https://perldoc.perl.org/functions/flock.html官方的例子要把这行改为这样,或者像下面那样直接给出 use Fcntl qw(:flock SEEK_END LOCK_EX LOCK_UN);sub lock { my ($fh) = @_; my $LOCK_EX = 2; flock($fh, $LOCK_EX) or die "Ca...
-
July 07, 2020
Golang里面模板templete调用函数
这篇文字的例子很好https://www.calhoun.io/intro-to-templates-p3-functions/完整的文档在这里,不过不是那么直观https://docs.studygolang.com/pkg/text/template/
-
July 04, 2020
Linux环境遇到的c++位运算的一个bug
昨天发现一个程序的bugunsigned long mask = 1 << 1;for (unsigned long i = 0; i < 64; i++) { if (mask & (1 << i)) { printf("%lu", i); }}我写这段代码的时候,觉得应该只会输出1,但centos8 + gcc 输出是 1 和 33,一下颠覆了我的认知。这里的原因就是1这个常量整数时32位的int,然后左移了33位之后就溢出了再次从头开始...
-
July 03, 2020
Linux的rtnelink编程修改和获取系统路由表
rtnetlinkhttps://www.man7.org/linux/man-pages/man7/rtnetlink.7.html直接使用netlink应该比较难用libnetlinkhttps://www.man7.org/linux/man-pages/man3/libnetlink.3.html ip route get命令使用应该是libnetlink接口,不过centos-8好像没找到libnetlink.so 和libnetlink-devel包需要直接ipro...
-
June 30, 2020
查看linux的page cache文件系统缓存里面是那些文件占用的vmtouch命令
top或者free命令发现linux的page cache文件缓存占用的内存特别多,但这些命令没法都看到是那些文件被缓存的,在进程的内存信息里面也没看的出来。在网上找了一下,提到几个命令吧fincore# rpm -qf /usr/bin/fincoreutil-linux-2.32.1-22.el8.x86_64centos 8 自带的一个命令,但好像不太好用# fincore 1.txt RES PAGES SIZE FILE21.7M 5555 21.7M 1.txt需要你指...
-
June 30, 2020
Openssl和aes的key和iv安全性问题
AES算法和模式的选择openssl enc -ciphers 不能用ecb模式,ecb是不安全的。 如果没有特殊要求, -aes-256-cbc aes-256-cfb 和-chacha20 都可以吧AES加密算法的CBC模式等要求IV要足够是随机的不可预测的,每次加密都不要用一样的IV, 这样才是安全的openssl 不要使用-K 和-iv 使用固定IV, 这样IV就没有随机性不安全了openssl 的key和IV的生成如果不是用-K和-iv指定的话,openssl会自动生成一个随机...
-
June 29, 2020
Linux查看丢包原因之dropwatch
dropwatchyum install dropwatchdropwatch -l kasdropwatch> startstap --poison-cache -vvv -L 'kernel.trace("*")'stap /usr/share/systemtap/examples/network/dropwatch.stp -c "sleep 100"perf top -e skb:kfree_skb
-
June 29, 2020
Centos 8多网卡时非主网卡路由不通的reverse path filtering(rp_filter)问题
CentOS的虚拟机设置使用了多个网卡,发现只有一个网卡的外部网络通讯是正常的用ping命令测试排查,结合tcpdump抓包排查,发现网络包是可以出去,icmp reply也回到本机了但被本机丢掉了,用dropwatch命令可以但在本机的ip_rcv_finish函数里面被丢包了ping 163.com -I enp0s3ping 163.com -I enp0s8检查路由没有问题, 发现只有 metric值最小的网卡通讯是可以正常的# ip routedefault via 172.31...
-
June 12, 2020
Golang的http反向代理
https比http的特殊,用的connect tunnel的技术。设置dns服务器地址的只有在linux下面才会用golang 的resolver才会有效果,windows下面不使用这个设置。package mainimport ( "context" "flag" "io" "log" "net" "net/http" "net/http/httputil" "strings" "time")var verbose boolvar dnsServer stringvar localIp...
-
June 11, 2020
Linux的抓包socket的过滤bpf指令怎么写
在内核源码的 https://elixir.bootlin.com/linux/latest/source/Documentation/networking/filter.txt 文件列出了怎么在程序里面写bpf代码https://docs.cilium.io/en/latest/bpf/ 对bpf的实现架构也有点说明“tcpdump ether multicast -dd” 这个也可以用tcpdump直接生成指定bfp表达式的code,然后在程序里面使用这个code数组```text...