分类目录归档:bash

把Hurricane Electric BGP Toolkit搜索结果转换成RouterOS防火墙IP列表

用着没人权的移动宽带,最近晚上玩DOTA 2的时候总是莫名其妙掉线(超售太多了,浙江省出口的BGP都掉了吧),于是想着搞个阿里云做策略路由好了,因此需要一个中国电信的IP列表。想了想,Hurricane Electric BGP Toolkit可以提供这个信息,但是不允许自动抓取。于是写了个脚本来做转换。

首先我们来搜索一下CHINANET:

bgp.he.net search result page

等页面加载完(要很久,数量巨大),然后在页面后半部分可以看到几万条IP段。接下来要做的事情就是把它们读出来导入RouterOS。于是写一个简单的Bash脚本:

#!/bin/bash

# https://gist.github.com/Jamesits/944ab9a484ad34522f6c4bce8d085132
# Captures every IP-CIDR notation in HTML file
# then convert it to RouterOS IP List format
# Usage: convert.sh source-file.html List-Name
# Then use /import file-name=List-Name.scr to 
# import this list on RouterOS
# You can save bgp.he.net search result as HTML
# then use this script to convert.

set -eu

if [ "$#" -ne 2 ] || ! [ -f "$1" ]; then
  echo "Usage: $0 source-file.html List-Name" >&2
  exit 1
fi

cat > $2.scr <<EOF
/ip firewall address-list
remove [/ip firewall address-list find list=$2]
EOF
egrep -oe "(\d{2,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,3})" "$1" | sed "s/^/add address=/g" | sed "s/\$/ list=$2/g" | awk '!a[$0]++' >> $2.scr

先把搜索结果页面Ctrl/Cmd+S保存一下,然后运行./convert.sh saved_webpage.html CHINANET 获得一个CHINANET.scr 文件,上传到RouterOS,然后在RouterOS终端运行

/import file-name=CHINANET.scr

大功告成。

使用GNU stow统一管理用户目录下那些隐藏的配置文件

命令行工具们有一个约定俗成的习惯:把配置文件写到用户的Home目录下面的隐藏文件里。系统用的时间一长,这样的文件就有一堆,有些你编辑过了,有些没有,并且你都不知道里面有些什么。先来看一下你有多少个这样的文件吧:

ls -ald ~/.* | grep -v ^l | tee >(wc -l)

也许你已经想到了一千种方法来折腾它们。在用户目录下面git init 一下?这可不是什么好主意。把它们手工复制到某个地方然后手工ln -s 回来?这也太麻烦了。然而我们现在有个叫stow的工具可以自动化处理这一切。

继续阅读

自动重启 OS X 10.10.3 上问题多多的 discoveryd

众所周知,OS X 10.10.3 问题多多,其中用来取代 mDNSResponderdiscoveryd 常常出现 CPU 占用过高,无法正常工作的情况。

下面有一段简单的 Shell 脚本用以循环检查 discoveryd 是否出现问题,并自动重启它。需要管理员权限启动,可选的第一个参数是限制的最高 CPU 使用率(默认 80)。
继续阅读

在Ubuntu上配置shadowsocks-libev

看了一大堆网上的教程,感觉很多方法都有些缺陷,比如用 nohup 来运行 ss-server 之类。因此在这里提供一种操作简便且配置完成后基本一劳永逸的方案。

本方法在 Ubuntu Server 16.04 上测试通过。

2017-02-09 Update: Update to match shadowsocks-libev 3.0+ and systemd.
2015-08-28 Update: Due to a recent change, install from apt source.

继续阅读