【问题标题】:How do I find my computer's IP address using the bash shell?如何使用 bash shell 找到我的计算机的 IP 地址?
【发布时间】:2010-10-25 03:30:47
【问题描述】:

我需要时不时地启动 Django 开发服务器,并让我网络上的其他机器可以查看它,如下所述:

http://docs.djangoproject.com/en/dev/ref/django-admin/#runserver

我的机器的 IP 地址往往会时不时地变化,所以我想要一个小的 shell 别名,或者用我机器的当前 IP 地址吐出 manage.py 命令的东西,可能是这样的:

python manage.py runserver $(COMMAND TO FIND MY MACHINE’S IP ADDRESS GOES HERE):8000

【问题讨论】:

    标签: django bash unix networking ip-address


    【解决方案1】:
    ifconfig en0 | grep inet | grep -v inet6
    

    上面的输出预计为以下形式:

    inet 192.168.111.1 网络掩码 0xffffff00 广播 192.168.111.255

    添加一条 awk 语句来打印第二列以避免使用 cut(awk 是一个非常标准的 unix 工具):

    ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'
    

    在 IP 的前几个数字始终相同(将 192.168.111 替换为您自己的数字)的 LAN 上时,我使用以下方法获取当前 IP:

    ifconfig | grep 192.168.111 | awk '{print $2}'
    

    要获取您知道名称的另一台机器的 ip,请尝试(将主机名和 192.168.111 替换为您自己的值):

    ping -c 1 hostname | grep 192.168.11 | grep 'bytes from' | awk '{print $4}' | sed 's/://g'
    

    【讨论】:

    • 啊哈,明白了,这看起来是个不错的方法。
    • 我稍微修改了cut,因为那对我不起作用。我有ifconfig en1 | grep inet | grep -v inet6 | cut -c 7-17
    • 是的,我改变了剪辑,因为对我来说,角色放置的剪辑似乎不太可靠。
    【解决方案2】:

    您可能已经意识到,但正在运行

    python manage.py runserver 0.0.0.0:8000
    

    让网络上的每个人都可以看到您的机器。

    您是否有理由需要指定您的 IP?

    【讨论】:

    • 听起来不错,虽然我这里的网络好像不行(其他机器好像看不到0.0.0.0)。
    • 不,您仍然连接到您的常规 IP 地址。因此,例如,如果您在您的机器上运行该命令,并且您的 IP 是 192.168.0.100,那么您网络上的机器仍然通过 192.168.0.100 访问您的机器。放入 0.0.0.0 只是自动执行任务,而不是寻找 IP。这就是你想要的。
    • 呵呵,刚看到我从来没有回复过这个。我现在一直用你的方法,效果很好。有点惭愧我不明白我实际上并不需要其他机器连接到0.0.0.0。
    • 也许您应该将其更改为您接受的答案?
    • 这似乎是最好的答案。 awking ifconfig 充其量似乎很脆弱。 +1 建议使用 why 0.0.0.0 改进这个答案。毕竟ip有点特殊
    【解决方案3】:

    这应该和我已经看到的其他命令一样工作:

    ifconfig eth0 | grep inet | awk '{print $2}' | cut -d':' -f2
    
    • 将 eth0 替换为所需的接口(eth0、eth1、wlan0...)

    I̶̶t̶h̶i̶n̶k̶̶y̶o̶u̶̶c̶a̶n̶̶a̶l̶s̶o̶̶w̶r̶i̶t̶e̶:̶

    ̶̶̶̶̶h̶o̶s̶t̶n̶a̶m̶e̶̶-̶I̶̶|̶̶c̶u̶t̶̶-̶d̶'̶̶'̶̶-̶f̶1̶̶

    【讨论】:

    • 如果你只想要第一个IP地址,你可以使用hostname -i
    • hostname -i 还给我 127.0.0.1
    • 主机名 -i 给我->hostname -i hostname: illegal option -- i usage: hostname [-fs] [name-of-host]
    • 主机名 -I 支持的地方(大写 I)
    【解决方案4】:

    最好的解决办法是:

    ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
    

    【讨论】:

    • 为我工作。如果您不想要 127.0.0.1 IP,您可以使用 'head -n1' 来获得最佳结果。可能不便携,不确定。但它完成了工作。
    • 我不会说“最好”。我直接复制到mac osx终端。我没有返回任何结果。
    【解决方案5】:

    人们正在使用字符计数从 ip 地址行中提取正确的列,但是使用空格作为分隔符可以使其更适合不同长度的 ip 地址...

    ifconfig en1 | grep inet | grep -v inet6 | cut -d" " -f2
    

    【讨论】:

    • 这是 [几乎] 适用于 OS X 的更简洁的答案之一,尽管我碰巧需要 en0 而不是 en1 (或者只是删除网络名称以获取所有内容)。
    【解决方案6】:

    这是一种快速而肮脏的方式,适用于 OSX

    /sbin/ifconfig | grep 'inet ' | grep -v '127.0.0.1' | head -n1 | awk '{print $2}'
    

    基本上获取所有IPV4地址的接口,跳过localhost然后获取第一个接口。

    另外,使用 ifconfig 的路径。从 ex 中使用时,我已经看到了许多 shell 脚本制动。 cron 因为 PATH 失败。

    【讨论】:

      【解决方案7】:

      在 Mac OS X 10.11.6 El Capitan(可能还有旧版本)上,您可以使用以下命令打印您的 IP

      ipconfig getifaddr <device>
      

      其中&lt;device&gt;en0en1 等。

      http://osxdaily.com/2010/11/21/find-ip-address-mac/

      【讨论】:

      • 埃尔卡皮坦?!? 好的爷爷!
      【解决方案8】:

      ifconfig 可能是您所追求的。您需要通过grep 运行它以过滤掉一些噪音。

      【讨论】:

        【解决方案9】:

        以下命令在 RHEL 6.3 上非常适合我:

         ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
        

        【讨论】:

          【解决方案10】:

          这可能不像其他一些解决方案那样优雅,但它适用于 Linux 系统并且比正则表达式看起来更舒服:

          ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | awk -F ':' '{print $2}'
          

          【讨论】:

            【解决方案11】:

            试试这个(如果你是 Arch 用户)

            resolveip -s $HOSTNAME
            

            另类

            要获取 IPv4 地址,您可以使用:

            host $(uname -n) | grep "address" | grep -v "IPv6" | head -n 1 | awk '{print $4}'
            

            获取 IPv6 一个:

            host $(uname -n) | grep "IPv6 address" | head -n 1 | awk '{print $5}'
            

            如果您愿意,可以将 $(uname -n) 替换为 $(hostname)。

            【讨论】:

            • 我的 Mac OS X 机器 (10.7.3) 上似乎没有 resolveip
            • 我没有$HOSTNAME,如果我有resolveip -s $(hostname),它会给出127.0.0.1,在许多情况下这是预期的,因为/etc/hosts 通常包含这种recprd
            • 对不起,我当时正在使用 Arch Linux,我没有提到这一点。帖子已更新。
            【解决方案12】:

            使用默认接口查找 IP 地址的简单命令。

            ip -o route get "8.8.8.8" 2>/dev/null | sed -e 's/^.* src \([^ ]*\) .*$/\1/'  
            

            ip route | grep src | awk -F 'src' '{print $NF; exit}' | awk '{print $1}'
            

            ip route | sed -n 's/.* src \(.*\) metric .*/\1/p' | uniq
            

            在所有 Unix 操作系统上测试

            【讨论】:

              【解决方案13】:

              这里有一个找到当前IP地址的解决方案:

              route -n get default|grep interface|awk ‘{ print $2 }’|xargs ipconfig getifaddr
              

              仅在 Mac 上测试。

              【讨论】:

              • 复制/粘贴到 mac osx 终端。没有结果。
              【解决方案14】:

              这会检查您的默认接口,并使用它来检索您的主 IP。 当您有许多接口和大量虚拟 IP 地址时很有帮助:

              netstat -rn | gawk '/UG/ {print $NF}' | xargs ifconfig | gawk 'match($0,/inet addr:(.*) B/,a) {print a[1]}'
              

              【讨论】:

                【解决方案15】:

                回顾:如果您想在命令行中 copy/paste 并获取网络 IP 地址,以下是适用于 Mac(在 WiFi 上)的方法:

                echo $(ifconfig en0 | grep inet | grep -v inet6 | cut -d" " -f2)
                

                这里将它分配给 bash 脚本变量:

                LOCAL_IP=$(ifconfig en0 | grep inet | grep -v inet6 | cut -d" " -f2)
                

                这是基于Valentin RocherMatt Kropmton 的回答

                【讨论】:

                  【解决方案16】:

                  仅在 Archlinux 上测试:

                  ifconfig $(route | awk '{if($1=="default") print $NF}') | awk '{if($1=="inet") print $2}'
                  

                  route获取默认接口,ifconfig获取接口IP地址。

                  由于命令语法或输出可能不同,您可能需要根据系统上的工作进行更改。

                  【讨论】:

                    【解决方案17】:

                    在 Android Shell 上,我试过了:

                    ifconfig eth0 | grep 'inet addr' | tr -d '^[A-Za-z]+$' | tr -s ':' | cut -d ':' -f 2
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2016-03-07
                      • 2010-09-12
                      • 2015-05-16
                      • 2018-11-10
                      • 2011-06-14
                      • 2015-09-16
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多