Libpcap 落地包转发及性能调优

Libpcap 落地包转发及性能调优

近期接到一个需求,需要使用 libpcap 从某网卡抓包发送到另一张网卡,关于 libpcap 的使用方法在这里不再赘述,网上有很多教程,本文最后会给出一个示例程序。这里记录一个转发效率性能调优的方法。 ...

September 7, 2021 | 2 分钟 | 664 字 | Tianlun Song
一键在 vs code online 中打开任意 github 仓库

一键在 vs code online 中打开任意 github 仓库

之前有大佬开发过一个项目 [github1s](https://github.com/conwnet/github1s) ,利用 GitHub action ,仅需在任意 github 仓库在 github 后面加上 1s 即可在一个在线的 VS code 中打开这个项目。 就在前不久,Github 官方发布了类似的功能,进一步简化了这个过程,仅需在仓库的 web 页面,按下 . 键,没错就是键盘上那个句号,github 就会打开一个在线的 VS code 并开启该仓库,您就可以更方便的浏览这个仓库了。 ...

September 3, 2021 | 1 分钟 | 227 字 | Tianlun Song
虚拟机 img 镜像密码修改

虚拟机 img 镜像密码修改

本文介绍使用 libguestfs-tools 修改镜像文件密码的方法。 步骤 # 环境 # CentOS Linux release 7.9.2009 (AltArch) # 鲲鹏 ARM 服务器 第一步:检查并修改qemu访问虚拟机镜像的权限 修改 qemu 配置文件 /etc/libvirt/qemu.conf,将 user = "root" 和 group = "root" 注释取消,并重启 libvirtd 或重启宿主机。 ...

September 3, 2021 | 1 分钟 | 500 字 | Tianlun Song
GDB 调试 QEMU 源码跟踪 QMP 协议执行

GDB 调试 QEMU 源码跟踪 QMP 协议执行

接上文,通过跟踪 libvirt 的源码,找到 virsh domblkinfo 最终是使用 QMP 协议从 QEMU 获取到关键字为 query-block 的数据,其中带有 wr_highest_offset 字段,该字段被 libvirt 认定为 磁盘利用率中 Allocation 值的来源。 今天就尝试在 QEMU 中找到获取 wr_highest_offset 字段的方法。 ...

September 3, 2021 | 2 分钟 | 533 字 | Tianlun Song
GDB 调试 libvirt 源码之 domblkinfo 命令源码跟踪记

GDB 调试 libvirt 源码之 domblkinfo 命令源码跟踪记

最近发现环境中 KVM 虚拟机磁盘利用率查不准,使用 virsh 命令查看磁盘使用情况得到如下结果: # virsh domblkinfo 20 vda --human Capacity: 2.000 GiB Allocation: 2.000 GiB Physical: 2.000 GiB 显然是有问题的,正常的数值三个应该不通,进入系统查看磁盘使用率也仅有 2% 左右,因此试图通过检查源码的方式查看是否正确。 ...

September 2, 2021 | 3 分钟 | 1434 字 | Tianlun Song
解决 Clash for windows 端口为 0 导致无法使用

解决 Clash for windows 端口为 0 导致无法使用

今天更新完 Windows 重启后发现上不了网了,检查 clash for windows 发现监听端口为 0 。 这就不正常了,检查了一下 C:\Users\<username>\.config\clash\logs 的日志,发现这行报错: level=error msg="Start Mixed(http and socks) server error: listen tcp 127.0.0.1:7890: bind: An attempt was made to access a socket in a way forbidden by its access permissions." 貌似是端口无法被正常绑定,网上找了一下原因,发现遇到该问题的人不少,大致这样解决: ...

August 30, 2021 | 1 分钟 | 316 字 | Tianlun Song
Perl 程序后台执行示例

Perl 程序后台执行示例

最近阅读 PVE 源码发现一处源码这样使用了 fork() 方法: $spid = fork(); if (!defined ($spid)) { die "can't put server into background - fork failed"; } elsif ($spid) { # parent exit (0); } 自己写示例发现这种方法可以使程序进入后台执行状态,大概原理是 fork 子进程,退出主进程,使得程序被 1 号父进程接管,在终端表现则是进入了后台执行状态。 ...

August 26, 2021 | 1 分钟 | 266 字 | Tianlun Song
Perl 面向对象之基类(use base)

Perl 面向对象之基类(use base)

use base somemodule; # 相当于以下两句的结合: BEGIN{ use somemodule (); push @ISA, qw(somemodule); } # 也可以同时 use base 两个或者两个以上的模块,即多继承,例如: use base qw(Foo Bar); BEGIN { use Foo (); use Bar (); push @ISA, qw(Foo Bar); } Perl 里 类方法通过 @ISA 数组继承,这个数组里面包含其他包(类)的名字,变量的继承必须明确设定。 多继承就是这个 @ISA 数组包含多个类(包)名字。 通过 @ISA 只能继承方法,不能继承数据。 参考文献 Perl 面向对象 Perl 中的 use base 的用法

August 25, 2021 | 1 分钟 | 166 字 | Tianlun Song
Perl 模块路径指定(调试环境)

Perl 模块路径指定(调试环境)

在调试 Perl 测试程序时,常常需要在测试路劲执行 Perl 脚本,相应的 .pm 模块测试程序也需并不在 Perl 默认的模块路径下,使用以下语句即可指定模块检索路径。 #!/usr/bin/perl use lib './'; use Person; # Person 包模块与当前脚本同级,可用上面两行代码指定包位置 ... 参考文献 Perl模块安装到非默认路径及其使用 两种指定Perl模块目录的方法(PERLLIB和use lib)

August 25, 2021 | 1 分钟 | 150 字 | Tianlun Song
QEMU 编译报错 undefined reference to g_app_info_launch_default_for_uri_finish 解决过程

QEMU 编译报错 undefined reference to g_app_info_launch_default_for_uri_finish 解决过程

编译 QEMU 时报如下错误: /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_app_info_launch_default_for_uri_finish' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_type_check_instance_is_fundamentally_a' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_app_info_launch_default_for_uri_async' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_strv_contains' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_list_model_get_type' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_drive_is_removable' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_application_get_resource_base_path' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_log_structured_standard' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_type_get_instance_count' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_list_model_get_n_items' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_file_enumerator_iterate' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_param_spec_get_name_quark' /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_list_model_get_item' collect2: error: ld returned 1 exit status make[1]: *** [qemu-system-x86_64] Error 1 make: *** [subdir-x86_64-softmmu] Error 2 先看一下报错的动态链接库依赖了哪些库: ...

August 20, 2021 | 2 分钟 | 827 字 | Tianlun Song