|
本帖最后由 dukelec 于 2020-4-5 02:34 编辑
又遇到一個神仙問題。。。
用這個命令添加 IP 地址之後
ip addr add fd44::4/64 dev wlan0
socket 編程無法綁定本地這個 IP,而另一個由路由分配的 2408:84f3.../64 的 IP 卻沒問題,同屬 wlan0。
- duke@duke-pc ~ $ python
- Python 3.7.7 (default, Apr 2 2020, 04:03:01)
- [GCC 9.2.0] on linux
- Type "help", "copyright", "credits" or "license" for more information.
- >>> import socket
- >>> soc = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
- >>> soc.settimeout(1.0)
- >>>
- >>> soc.bind(('fd44::1', 0xcdcd))
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- OSError: [Errno 99] Cannot assign requested address
- >>>
复制代码
用以下命令臨時允許綁定非本地 IP 才能成功
echo 1 > /proc/sys/net/ipv6/ip_nonlocal_bind
所以非常奇怪,爲什麼明明是本地的 IP 被識別成非本地 IP?
先恢復成不允許綁定非本地 IP。
最後查到用 ip -6 addr 命令查到 fd44::1 地址有一個標誌 tentative,繼而查到這篇文章:
https://www.the-art-of-web.com/system/ipv6-dad-tentative/
按照文章所說,關閉 DAD 就好了。
但是,想想不應該啊,於是用 wireshark 開啓抓包,然後再添加 fd44::1 地址,竟然發現:
本機廣播:有沒有人用地址 fd44::1?沒有的話我就要用了啊。。。
熱點手機:我我我,我在用 fd44::1,我的 MAC 地址是……
換了一個 IP 試竟然還是一樣,adb 登錄手機看了一下,根本就沒有 fd 開頭的 ip 地址。。。
好吧,確認問題出在手機。。。
再次領悟到,網絡相關命令都用 ip 比較好,能及時發現問題。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|