Aggregator
rakshasa多级代理内网穿透工具
rakshasa是一个使用Go语言编写的强大多级代理工具,专为实现多级代理,内网穿透而设计。它可以在节点群里面任意两个节点之间转发TCP请求和响应,同时支持socks5代理,http代理,并且可以引入外部http、socks5代理池,自动切换请求IP。
节点之间使用内置证书的TLS加密TCP通讯,再叠加一层自定义秘钥的AES加密,可以在所有Go支持的平台使用。可以在你所有的的Windows和Linux服务器上搭建节点并组成节点群网络。
节点分为普通节点(node)与控制节点(fullnode)
- 普通节点,无法控制其他节点进行代理、shell等操作
- 控制节点,全功能节点
- 见文章下面留言补充(1)
-
更多介绍:见文章下面留言补充(2)
-
win10+Proxifier实现内网穿透:见文章下面留言补充(3)
-
v0.1.0 2023-03-28
- 首次发布
-
v0.2.0 2023-04-02
- 更改为fullnode版本,fullnode为全功能版本可以控制别人也能被控
- 增加node版本,去掉私钥,无法发起代理等关键操作,适合被控
- 增加lite版本,在上面版本的基础上,精简cli交互与http代理池,体积缩小2mb
- 优化节点连接逻辑,并且遍历网卡ip进行net.Dail,解决多网卡下,无法连接的问题
生成新的证书,编译所有版本节点
go run build.go -all编译所有版本节点(不更新证书)
go run build.go -all -nocert生成覆盖证书
go run build.go -gencert生成控制节点与普通节点
go run build.go -fullnode只生成普通节点
go run build.go -node证书保存在cert目录下,可以使用第三方工具生成,请使用RSA PKCS1-V1.5
private.go --编译普通节点的时候要删除此文件 private.pem --与public.pem对应的公钥私钥,普通节点不包含私钥 public.pem server.crt --tls通讯证书 server.key --tls通讯私钥 版本区别 fullnode node fullnode_lite node_lite 连接其他节点 √ √ √ √ 启动本地socks5代理 √ √ √ √ 启动本地http代理 √ √ √ √ 启动多层代理 √ × √ × 远程shell √ × √ × 其他远程功能 √ × √ × 交互式CLI √ √ × × check_proxy √ √ × ×简单来讲
- fullnode 完全版,能控制别人,也能被控
- node 能连接其他节点,但是不能对其他节点操控,适合作为被控端
- lite版本,精简掉cli和net/http,与一些debug的代码
不带任何参数即可启动:
d:\>rakshasa.exe start on port: 8883 rakshasa> rakshasa>help Commands: bind 进入bind功能 clear clear the screen config 配置管理 connect 进入connect功能 exit exit the program help display help httpproxy 进入httpProxy功能 new 与一个或者多个节点连接,使用方法 new ip:端口 多个地址以,间隔 如1080 127.0.0.1:1081,127.0.0.1:1082 ping ping 节点 print 列出所有节点 remoteshell 远程shell remotesocks5 进入remotesocks5功能 shellcode 执行shellcode socks5 进入socks5功能 rakshasa>请查阅CLI使用说明了解详细信息(见文章下面留言补充(4) )
其他启动参数说明 -nocli在无法后台执行的情况下,启动一个不带 CLI 的节点:
nohup /root/rakshasa -nocli > /root/rakshasa.log 2>&1 & #Linux下配合nohup后台执行 -p 端口以指定端口启动:
rakshasa -p 8883 -d ip:port,ip:port...连接下一层代理或更多层代理,多个地址以逗号隔开,生效在最后一个 ip:port:
rakshasa -d 192.168.1.1:8883,192.168.1.2:8883,192.168.1.3:8883 -socks5 1080 #从本地1080端口启动一个socks5代理,流量通过三层转发ip最后在192.168.1.3请求目标数据 -socks5 用户名:密码@ip:端口本地开启SOCKS5代理穿透到远程节点,可以不带-d:
rakshasa -socks5 1080 #不使用-d参数,则表示直接在本机启动一个socks5代理 -remotesocks5 端口远程开启SOCKS5代理流量出口到本地:
rakshasa -remotesocks5 1081 -d 192.168.1.2:1080,192.168.1.3:1080 #方向从右往左(加上本机是3个节点),在192.168.1.3这台机器开启一个socks5端口1081,流量穿透到本地节点出去 -connect ip:port,remote_ip:remote_port本地监听并转发到指定 IP 端口,使用场景为本机连接 teamserver,隐藏本机 IP:
rakshasa -connect 127.0.0.1:50050,192,168,1,2:50050 -d 192.168.1.3:1080,192.168.1.4:1080 #本机cs连接127.0.0.1:50050实际上通过1.3,1.4节点后,再连接到192.168.1.2:50050 teamserver,teamserver看到你的ip是最后一个节点的ip -bind ip:port,remote_ip:remote_port反向代理模式,必须配合-d使用:
rakshasa -bind 192.168.1.2:50050,0,0,0.0:50050 -d 192.168.1.3:1080,192.168.1.4:1080 #与上面相反,在最右端节点监听端口50050,流量到本机节点后,最终发往192.168.1.2,最终上线ip为本机ip -http_proxy 用户名:密码@ip:端口启动一个http代理,可以不使用-d,建议配合-http_proxy_pool使用代理池,自动切换代理ip:
rakshasa -http_proxy 8080 -http_proxy_pool out.txt -password 密钥各节点除了证书校验之外,还额外支持密钥连接,建议使用并定期更换密钥,以避免二进制泄露后被别人连上
rakshasa -password 123456 -f yaml文件 [详细说明]指定配置文件启动。
-help更多启动参数使用帮助
关于开源本作品使用MPL 2.0许可证,您可以下载、修改和使用本代码。然而,您必须明确表示,任何此类担保、支持、赔偿或责任义务均由您单独提供,与本作者无关。本人不承担您在使用或修改本程序所造成的任何后果或责任。
在遵循MPL 2.0许可证的基础上,您可以自由地对rakshasa进行修改和扩展,以满足您的特定需求。同时,您可以将改进和新功能贡献给社区,让更多人受益。但请注意,确保在分享和发布修改后的代码时遵守许可证要求,并尊重原作者的版权。
联系方式QQ: 2252233695
WeChat/微信: Mob20045
3 个帖子 - 2 位参与者
Those Magnificent underdogs competing ChatGPT
How to Be Prepared in the Age of Cyber Insecurity
知识的有效性评判及加工
公告 | 中通SRC 2023年Q1季度奖励&3月众测活动奖励公布
傅雷. 世界美术名作二十讲.序 - 读后感《百年巨变也百年未变》
Episode 003 - Carry Kangur
Locked Shields and Crossed Swords are the two biggest annual cyber exercises, but who makes it all possible? Meet the Head of Cyber Exercises in the NATO Cooperative Cyber Defence Centre of Excellence (CCDCOE) - Carry Kangur. Learn how more than 300 people work together daily to create the opportunity for cyber defenders to learn new skills and meet with other professionals from around the world.
Join Carry's conversation with our host - Peter Manev, and get the insights of the day-to-day management and planning in NATO CCDCOE. Find Carry Kangur and CCDCOE:
LinkedIn: https://www.linkedin.com/in/carrykangur/
Twitter: https://twitter.com/carry_the_k
CCDCOE https://ccdcoe.org/
手把手带你用空间测绘引擎Hunting C2
Linux 服务器短信接收同步
- 0x00 前言
- 0x01 手机之间同步的困扰
- 0x02 SIM800C USB 模块
- 0x02.5 A7670G 模块(2024年11月6日更新)
- 0x03 gammu 接收短信与推送
- 0x04 gammu 发送短信
- 0x05 gammu 监控与通知
- 0x06 gammu 的坑
- 0xff 参考
最近有多张电话卡的需求,记录一下我的解决方案,目前认为是比较完美的,已经稳定运行快一个月。
0x01 手机之间同步的困扰我的 iphone 不支持双卡,带两个手机又比较麻烦,所以最开始就想利用一下闲置在家里的旧手机,iOS 支持 imessage 收到信息自动同步到新手机。 但中间遇到两个新问题:
1)老手机长期开机待机电量消耗很快,特别是 iphone 电池容量也不大,如果一直插着电对手机电池也不是特别好; 2)我的旧手机是第一代 iphone SE,它不支持升级到 IOS16 了,而登陆新手机的 icloud 账号居然提示我不能登陆,请先升级到 IOS16(Only apple can do!)。
我尝试了多种解决方案,均登陆失败。我不太懂苹果的逻辑,但我的旧手机看来是永远都登陆不了我主用的 icloud 账号了。
第一个问题还好,可以考虑用智能插座等解决方案去定时开关解决,但第二个账号问题就彻底堵死了想用手机同步短信的路子。 没办法,只能考虑其他路线了。
0x02 SIM800C USB 模块网上搜索时,无意中发现了有开发板可以做到接收短信的功能,同时还有支持 USB 接口的模块。 马上在淘宝上下单了一个,还带天线支持全网通,才50多块钱。 唯一的缺点可能就是该模块没有外包装,不防猫。 图片大概长这样:
把这个东西直接插到电脑上,Linux 或者 windows 都行,我是直接插到家里的 Linux 服务器上的,插上去之后还不能直接用,需要先安装CH340的串口驱动程序,我这里是店家直接给的驱动,直接 make install 安装就行,也可以自己参考网上的资料安装。 安装后就能通过 USB 接口检测到设备了。
❯ ls /dev/ttyUSB* /dev/ttyUSB0 ❯ lsusb Bus 001 Device 008: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter ... 0x02.5 A7670G 模块(2024年11月6日更新)伴随着长时间的使用,可能是因为它只支持 2G 信号,而随着现在 2G 逐渐被淘汰,SIM800C 的信号变得越来越不稳定了,经常收不到短信甚至掉线。
于是我开始考虑重新购入一个新设备,最终挑中了 A7670G 模块,它支持 4G、3G、2G 各种频段,接口也支持串口和 USB 口连接,很方便。 但该设备不如 SIM800C 轻便,还需要额外供电,也贵了不少,成本来到了150到200块钱。
大概长这样(外壳可以选配):
后续过程和上面 SIM800C 一般无异,就不赘述了。
切换成这个后发现稳定了很多,虽然短信接收因为漫游的原因还是有延迟,但起码不再掉线不漏接短信了,非常满意。
0x03 gammu 接收短信与推送该模块原生是通过串口去控制,通过 AT 命令收发短信和打电话等操作的,我在测试的时候也用过这个命令去控制。 但我其实不需要过于复杂的功能,仅仅需要收发短信就可以了,问了下 chatGPT,它推荐我用 gammu 这个工具去控制,我才发现有这样一个工具,而且效果确实也挺好。
gammu 的介绍和基本操作我这里就不详细介绍了,感兴趣的可以自己看官方文档或者其他入门资料介绍。 我是通过 gammu-smsd 这个常驻进程去实现的:
配置文件(有省略):
#/etc/gammu-smsdrc [gammu] # Please configure this! port = /dev/ttyUSB0 connection = at115200 # Debugging logformat = textall # SMSD configuration, see gammu-smsdrc(5) [smsd] service = files RunOnReceive = /etc/sms_send_tg.sh ...为了能够同步给远端的其他手机,我选择用 telegram bot 实现,当然也可以选择其他对网络更友好的方式,比如 slack bot,飞书等等。 脚本内容如下:
#!/bin/bash # Replace YOUR_TOKEN and YOUR_CHAT_ID with your Telegram bot token and chat ID TOKEN="xxxx" CHAT_ID="-1xxxx" echo "Received log from tg bash script: $SMS_1_NUMBER: $SMS_1_TEXT" >> /xxxxxx/sms_ganmu.log # Send the message to the Telegram bot using cURL curl -q -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \ -d chat_id="$CHAT_ID" \ -d text="Received SMS from $SMS_1_NUMBER: $SMS_1_TEXT" && echo "Send message successful." 0x04 gammu 发送短信因为我比较少用到主动发短信的功能,大部分时候是手动发短信,所以没有实现自动化,这里就简单介绍一下手动发短信的功能:
echo "hello,my friend" | su gammu -s /bin/bash -c 'gammu-smsd-inject TEXT +8613333333333'主要是借助了 gammu-smsd-inject 程序实现的。
0x05 gammu 监控与通知虽然 gammu-smsd 进程我是通过 systemd 控制自动启动的,但毕竟是外设硬件,存在着太多不可预测的意外情况(你也不知道什么时候猫猫发疯给你咬了),所以我们还需要有一个监控该进程用户通知提醒的进程。
官方提供了一个程序 gammu-smsd-monitor 来监控健康状态,但该程序没有考虑后台持续运行的情况,也没有提供附带的报警功能,所以需要自己去改进实现。
我是通过 systemd 来实现的,当该服务失败或者异常时会调用 bark-alert-user 服务:
# /etc/systemd/system/gammu-smsd-monitor.service [Unit] Description=Gammu SMSD Monitor After=network.target OnFailure=bark-alert-user@%n.service [Service] Type=simple ExecStart=/usr/bin/gammu-smsd-monitor -d 15 Restart=no RestartSec=5 LimitNOFILE=65535 ExecStop=/usr/bin/killall gammu-smsd-monitor [Install] WantedBy=multi-user.target创建报警服务bark-alert-user,该服务触发时会执行 /usr/bin/bark_alert.sh :
# /etc/systemd/system/[email protected] [Unit] Description=Bark alert send to user for %i [Service] Type=oneshot ExecStart=/usr/bin/bark_alert.sh %i User=nobody Group=systemd-journal脚本内容是发送一个 http 请求到 bark,然后会将通知发送到我的手机上:
#!/bin/bash curl "https://api.day.app/<token>/$1"读者根据需求也可以使用其他的类似功能来实现。
0x06 gammu 的坑-
使用的时候需要注意, gammu 控制是支持直接用 gammu 程序 和 gammu-smsd的,但这两个程序其实是互斥的,也就是说两者只能有一个同时占用你的 USB 设备。我当时在这里卡了很久,以为是我的设备出了问题 ,在我的命令行 gammu 直接测试设备成功时,gammu-smsd 启动就会报错。所以,请务必同时只使用 gammu 或者 gammu-smsd 来控制你的设备。
-
gammu 默认是通过文件存储短信的,所以如果以非 root 用户启动服务的话,需要注意服务用户对收件箱和发件箱的权限,否则可能会出现狂发短信的情况。
gammu 官方文档: https://docs.gammu.org/
自建短信中转服务:https://zhuanlan.zhihu.com/p/53387245
get-notification-when-systemd-monitored-service-enters-failed-state: https://serverfault.com/questions/694818/get-notification-when-systemd-monitored-service-enters-failed-state