היום למדתי: איך למצוא כתובת IP בלי ifconfig
05/08/2022
בוובינר WSL שהתקיים אתמול רציתי להראות שכתובת ה IP של מכונת הלינוקס הוירטואלית שונה מכתובת ה IP של מכונת החלונות שמארחת אותה. הופתעתי לראות שה Ubuntu הוירטואלי לא ממש שמח להריץ ifconfig. וזה לא בגלל שהיה וירטואלי.
הפקודה ifconfig היא מיושנת ויש לה כמה מגבלות שלעולם לא יתוקנו, ולכן הפקודה המודרנית והמומלצת לשימוש היא ip. בשביל למצוא כתובת ip של מכונה אני יכול להפעיל:
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:1f:e8:4c brd ff:ff:ff:ff:ff:ff
inet 192.168.64.4/24 brd 192.168.64.255 scope global dynamic enp0s1
valid_lft 56632sec preferred_lft 56632sec
inet6 fd5e:dcce:7fd0:a7fb:5054:ff:fe1f:e84c/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591997sec preferred_lft 604797sec
inet6 fe80::5054:ff:fe1f:e84c/64 scope link
valid_lft forever preferred_lft forever
3: br-20cce5ed46b0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:2a:b6:7a:9c brd ff:ff:ff:ff:ff:ff
inet 172.20.0.1/16 brd 172.20.255.255 scope global br-20cce5ed46b0
valid_lft forever preferred_lft forever
4: br-9946704f08d6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:c3:91:58:ec brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-9946704f08d6
valid_lft forever preferred_lft forever
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:4d:37:b0:5c brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
וכמו עם ifconfig גם פה אני יכול לסנן את כל הבלאגן:
$ ip addr show | grep -w inet
inet 127.0.0.1/8 scope host lo
inet 192.168.64.4/24 brd 192.168.64.255 scope global dynamic enp0s1
inet 172.20.0.1/16 brd 172.20.255.255 scope global br-20cce5ed46b0
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-9946704f08d6
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
אפשר גם להפעיל ולכבות איתה ממשקי רשת, אבל המתג שאני אהבתי הוא בכלל האות n, שמציגה את כל השכנים ברשת מפרוטוקול arp:
$ ip n
192.168.64.1 dev enp0s1 lladdr 52:ed:3c:d3:64:64 REACHABLE
fd5e:dcce:7fd0:a7fb:10c8:64d2:15b:ca05 dev enp0s1 lladdr 52:ed:3c:d3:64:64 router STALE
fe80::50ed:3cff:fed3:6464 dev enp0s1 lladdr 52:ed:3c:d3:64:64 router STALE
דף התיעוד הוא כאן: https://linux.die.net/man/8/ip
והיום הוא יום מצוין להתחיל להתרגל. ואם האצבעות שלכם ממש מתעקשות על התחביר הישן, תמיד אפשר להפעיל:
$ alias ifconfig="ip addr show"
ולהרגיש כאילו כלום לא השתנה.