@Daniel65536
cat chnroute.txt | cidrmerge > chnroute.merge.by.cidrmerge.txt
python2.7 cidr-ip.py chnroute.txt > ip_chnroute.txt
python2.7 cidr-ip.py ~/chnroute.merge.by.cidrmerge.txt > ip_chnroute-cidrmerge.txt
ls -sk ip_chnroute*
4736968 ip_chnroute-cidrmerge.txt 4736968 ip_chnroute.txt
they are the same size (4.7G)
wc -l
to count lines of both ip list files335792128 ip_chnroute-cidrmerge.txt
335792128 ip_chnroute.txt
they have the same number of lines.
结论: cidrmerge 对 chnroute 的压缩的确有效,多谢。
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/bin"
# 生成 chnroute --------
curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt && echo "chnroute.txt generated" || exit 0
# 用 cidrmerge 压缩 chnroute ,生成压缩版 ----------
cat chnroute.txt | cidrmerge > chnroute.lite.txt && echo "chnroute.lite.txt generated" || exit 0
# 生成 Mac 版本的 路由添加删除修改命令,其中${_action} 可以用 if then fi 定义为 add change delete ,${current_gw}可以用 `netstat -nr -qq -f inet | grep UHLWIi | awk '{print $1}'` 生成 -------------
rm -f chnroute-action
while read cnip ; do echo "route -nq \${_action} ${cnip} \${current_gw}" >> chnroute-action ; done < chnroute.lite.txt && echo "chnroute-action generated, copy them to the script"
sorry, 打错,生成${current_gw} :
netstat -nrf inet | grep UHLWIi | awk '{print $1}'
1
haogefeifei 2015-09-01 18:13:23 +08:00
用网有那么麻烦?
|
2
Daniel65536 2015-09-01 18:44:26 +08:00
居然改 sudo 设置,你难道不知道 /Library/LaunchDaemons/下的 plist 都是 root 权限运行的么,非要 sudo visudo ,另外 route 不先跑 cidrmerge 也是槽点,明明 3765 条路由可完成的事情要用 5837 条去做。
|
3
cattyhouse OP @Daniel65536 要是能 merge , chnroute 项目为什么不 merge ?他们不 merge 自有原因。
用系统的 launchd 不是很建议,即使用了,还是要用 sudo 来 load 和 unload 。 对于常用终端的来说,改 sudo 设置基本上避免不了的,否则就要一直输入密码,程序无法后台自启动。 |
4
yushiro 2015-09-01 20:34:33 +08:00 via iPhone
好像很不错的样子,回去试试。
|
5
Daniel65536 2015-09-01 22:40:49 +08:00
> 要是能 merge , chnroute 项目为什么不 merge ?他们不 merge 自有原因。
笑哭,因为不 merge 好写代码,因为水平不够没法用 python 写个 merge 函数出来。不然你以为为什么还会冒出个用上动态规划,效果比过一个 cidrmerge 还好的 bestroutetb 项目出来?还不是 chnroute 作者水平不够。 > 用系统的 launchd 不是很建议,即使用了,还是要用 sudo 来 load 和 unload 。 homebrew 装的程序如果 plist_option 开了:startup 就会放 /Library/LaunchDaemons/,这才是 root 权限 plist 的最佳实践代表。 > 对于常用终端的来说,改 sudo 设置基本上避免不了的 呵呵。 |
6
geeti 2015-09-02 02:49:53 +08:00
> 对于常用终端的来说,改 sudo 设置基本上避免不了的
呵呵。 |
7
cattyhouse OP @Daniel65536 请问你用 cidrmerge 生成的 ip 地址在哪里, show me the code 。
bestroutetb ,要搞两个网关,自动化实现起来不是很方便,尤其是如果 vpn 还没连上之前,加载 bestroutetb 会出现找不到 vpn 网关。 |
8
cattyhouse OP @Daniel65536
@geeti mac 上用 shadowvpn , openconnect 都要用 sudo 啊,用 networksetup 也要 sudo 的啊,我说的是“终端操作” 而且是趋向于自动化。。。 不需要过多的人工干预。 |
9
Daniel65536 2015-09-02 15:36:30 +08:00 via iPhone
cat ip.txt | cidrmerge > newip.txt
至于 cidrmerge 可以 brew install cidrmerge 哪怕 setuid 和 chmod 755 都比改 sudo 好。 |
10
cattyhouse OP @Daniel65536 谢谢,刚才用 cidrmerge 重新生成了一份 ip 列表,数量从 chnroute 的 5824 变成 3757 ,只是不知道是否会有”误伤“ 或 “遗漏”?
|
11
cattyhouse OP @Daniel65536 如果什么地方可以对这两个 cidr 展开然后做比较,就知道是否会有不同了。
|
12
cattyhouse OP @Daniel65536 虽然你吐槽不是很中听,但是我对于这些有用的建议还是很快去实现的,等我测试 cidrmerge 生成的 ip 的确包含全部中国的 ip 而且不包含任何中国以外的 ip 之后,我再把 chnroute 替换掉。
|
13
cattyhouse OP @cattyhouse 你说的 3765 条是不是包含 Private Network 的 ip 段啊,我用 cidrmerge 操作 chnroute 之后得到的数量是 3757 条,奇怪了。
|
14
cattyhouse OP |
15
cattyhouse OP @Daniel65536 有现成的 script 来 expand cidr 地址,然后就可以做比较,晚上测试下
http://stackoverflow.com/questions/16986879/bash-script-to-list-all-ips-in-prefix |