分类目录归档:Shell

从procfs获取设备IP

早晚有时候你会想要获得本机IP并且发现你没有装iproute2。这时候你会觉得coreutils也行吧。

# IPv4
cat /proc/net/fib_trie | awk '/32 host/ { print f } {f=$2}' | grep -v 127.0.0.1 | sort -u
# IPv6
cat /proc/net/if_inet6 | cut -d" " -f1 | grep -vE 0{31}1 | sort -u | sed 's/.\{4\}/&:/g' | sed 's/:$//g'

把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

大功告成。

WiFiPineapple通过代理服务器下载模块

近日做一些无线安全审计,于淘宝购得一山寨WiFiPineapple,到货后发现是联想某款便携路由器魔改版。二话不说刷上了最新的Nano 1.0.5固件,兴冲冲连上它的Wi-Fi打开管理面板(提醒一下,不要把有线网络接口直接连到现有路由器上,默认设置在那个端口有DHCP,会冲突),点击模块,然后发现死活获取不到模块列表。经过检查,发现上一代固件的模块安装是走浏览器的,即只要电脑能连接上wifipineapple.com,就能正常下载固件;而这一代的所有API请求都走设备上的PHP服务,更加不幸的是,wifipineapple.com在中国大陆不能正常访问。经过一番研究之后,我还是成功让设备的模块下载功能跑起来了。

继续阅读