已经很久没有更新博客了,刚好把这两天业余时间弄的内网穿透工具NATAPP总结一下。
三年前买的的阿里云服务器到期了,续费一年的价格不太香,所以通过“本地服务器+NATAPP穿透+Server酱”方式完成外网访问功能。
NATAPP配置
NATAPP提供两个免费隧道,TCP和HTTP。白嫖党当然全都要。
- 在
/usr/local/
下新建natapp_tcp
和natapp_web
两个文件夹 - 拷贝
natapp
和config.ini
到两个文件夹中 - 配置
config.ini
:
#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken=1f************8fa #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=stdout #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=info #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
- 然后写一个
start_natapp.sh
脚本让 natapp 后台运行:
# rm ~/nohup.out
nohup /usr/local/natapp/natapp_web/natapp &
nohup /usr/local/natapp/natapp_tcp/natapp &
# tail -20 ~/nohup.out
tail -f ~/nohup.out
nohup日志文件默认生成在当前路径下 *,如果没有权限则输出到用户目录:~/nohup.out
域名提取+微信通知
分析 nohup.out 文件,从中提取 url 链接。废话不多说,上代码:
parser_natapplog.py
import re
import requests
# Server酱申请的skey
SCKEY = ' '
global contents
contents = ''
pattern_list = r'"Url":"[a-zA-Z]+://([a-zA-z0-9]+.[a-zA-Z0-9]+.cc(:)?[0-9]*)"'
context = []
def output(content):
global contents
content += ' '
contents += content + '\n'
content += ' '
print(content)
#server酱推送
def server():
global contents
message = {"text": "NATAPP更新通知", "desp": contents}
r = requests.post("https://sc.ftqq.com/" + SCKEY + ".send", data=message)
if r.status_code == 200:
print('[+]server酱已推送,请查收')
def logparser(filepath):
linenum = 0
with open(filepath) as f:
lines = f.readlines()
for line in lines:
result = re.compile(pattern_list).search(line)
if not result:
linenum = linenum + 1
continue;
else:
if 1:
context.append("http://" + result.group(1))
# print("http://" + result.group(1)+"\n")
else:
content = "http://" + result.group(1)
output(content)
def output_Last2_element():
num = len(context)
output(context[-1])
for i in range(2, num):
if len(context[-i]) != len(context[-1]):
output(context[-i])
return
else:
continue
if __name__ == '__main__':
logparser("./nohup.out")
output_Last2_element()
try:
server()
except Exception:
print('[+]请检查server酱配置是否正确')
定时运行
crontab -e
30 8,20 * * * python3 ./parser_natapplog.py
完结上图:这个是没做优化的通知,我分享的源码已经修改为 输出列表的最后两个不同的链接即可,保持最新的链接。
【参考文献】
明天双休日,今晚要熬夜看世界杯了,浏览器记录现在懒得翻了,向伟大的前辈们表达深深的谢意!