借助 gdbserver 实现在 CLion 中以 root 权限调试

基本思路

实际上最简单的方式是以 root 权限运行 CLion,但是这种方法不太清真,所以不用。
基本思路是借助 gdbserver 用远程调试实现以 root 权限运行需要调试的程序。

详细步骤

安装 gdbserver

首先要确认已经安装了 gdbserver,如果没有的话 apt 系的发行版直接安装包 gdbserver:

sudo apt install gdbserver

以 root 权限启动 gdbserver

这一步可以在 CLion 内建的 Terminal 中操作,也可以使用其他终端:

sudo gdbserver localhost:2333 /path/to/program

这条命令中 localhost:2333 表示监听本地 2333 端口,localhost 可以省略直接写作 :2333,这样可以在其他机器上连接本机运行的 gdbserver 实现“真”远程调试,如果没有这种需求的话最好还是限制只监听本地地址。
端口号 2333 也可以随意,只要没有被占用就好,/path/to/program 是需要调试的程序的路径。

- 阅读剩余部分 -

Bash 实现子网掩码与前缀长度互转

前缀长度转换为子网掩码

脚本: prefix_to_mask.sh

#!/bin/bash
# date: 2018-03-03
# license: GPLv3 https://www.gnu.org/licenses/gpl-3.0.txt
# author: nanpuyue <nanpuyue@gmail.com> https://blog.nanpuyue.com

num=$(( 4294967296 - 2**(32-$1) ))
for i in {3..0};do
    echo -n $(( $num / 256**$i ))
    num=$(( $num % 256**$i ))
    [[ $i = 0 ]] && echo || echo -n .
done

这段脚本完全使用 Bash 内置函数实现,不调用外部进程。

子网掩码转换为前缀长度

脚本: mask_to_prefix.sh

- 阅读剩余部分 -

Linux 与 Windows 双系统共享蓝牙鼠标

起因

本着“师夷长技以制夷”的想法,装了一个 Windows 10,装完过后发现蓝牙鼠标需要重新配对,切换系统过后又需要重新配对……

看样子蓝牙的配对信息是存储在系统上的,所以要实现在切换系统后不需要重新配对就能正常使用蓝牙鼠标的话,基本思路应该是手动修改其中一个系统上的配对信息使其与另一个系统一致。

查了一圈,蓝牙 3.0 和 4.x 的配对信息还很不一样,总的说来 4.x 的信息量更大,需要改动的参数也多一些,本文主要针对蓝牙 4.x 的鼠标。

基本步骤

  1. 先在 Linux 下配对蓝牙鼠标(用于生成配置文件)
  2. 切换到 Windows 下配对蓝牙鼠标(用于读取配对信息)
  3. 修改 Linux 下的配对信息与 Windows 一致

当然也可以反过来做,修改 Windows 下的配对信息与 Linux 下一致,但是不推荐那样做。

读取 Windows 下的蓝牙配对信息

Windows 的蓝牙配对信息存储在注册表中:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\<本机蓝牙 MAC>\<鼠标蓝牙 MAC>

其中的 MAC 地址不带分隔符,并且这里需要系统权限才能访问,我找到两个方法来读取这部分信息。

- 阅读剩余部分 -

为 Dell iDRAC8 上传 SSL 证书

安装 racadm

WEB 界面只能上传证书不能上传私钥,所以需要使用 racadm 命令行工具来上传,首先得安装 racadm

添加软件源

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 1285491434D8786F
sudo sh -c "echo deb http://linux.dell.com/repo/community/openmanage/910/xenial xenial main > /etc/apt/sources.list.d/linux.dell.com.sources.list"

使用 apt 安装

sudo apt-get update
sudo apt-get install srvadmin-idracadm8

链接 libssl.so

安装完过后,直接使用 racadm 上传证书可能会报下面的错误:

ERROR: RAC1170: Unable to find the SSL library in the default path.
       If a SSL library is not installed, install one and retry the 
       operation. If a SSL library is installed, create a soft-link of the 
       installed SSL library to "libssl.so" using the linux "ln" command 
       and retry the operation.

- 阅读剩余部分 -

HAProxy 做 TCP 反代获取客户端真实 IP

大约半年前,因为一些奇怪的原因,需要给博客添加 HAProxy 做基于 TCP 的反代,配置倒也简单,但是遇到一个很麻烦的问题,就是服务端无法获取到客户端的真实 IP 了,所有访问都有一个共同的来源:127.0.0.1,简直可怕。

当初解决这个问题也花了点时间,Google 了好几圈总算给解决了,分享一下解决方案。

全局配置就不贴了,关键配置如下:

frontend ft_ssl_vip
  bind <公网 IP>:443
  mode tcp

  timeout client 5m

  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }

  use_backend bk_ssl_nanpuyue_com if { req.ssl_sni -i nanpuyue.com }
  use_backend bk_ssl_nanpuyue_com if { req.ssl_sni -m end .nanpuyue.com }
  default_backend bk_ssl_nanpuyue_com

# nanpuyue.com
backend bk_ssl_nanpuyue_com
  mode tcp
  server http 127.0.0.1:2066 send-proxy

frontend ft_ssl_nanpuyue_com
  mode http
  bind 127.0.0.1:2066 ssl crt /path/nanpuyue_com.pem accept-proxy
  option forwardfor
  reqadd X-Forwarded-Proto:\ https
  default_backend bk_http_nanpuyue_com

backend bk_http_nanpuyue_com
  mode http
  server http 127.0.0.1:80
  server https 127.0.0.1:443 ssl verify none

- 阅读剩余部分 -