如何从命令行找到我的IP地址?


159

我知道您可以做到ifconfig | grep inet,但这可以为您显示几个IPv4地址。如何获得SSHing等的特定密码?


您要查找的不是您的Mac IP地址,而是您的ISP归属于路由器Internet接口的公用 IP地址。

Answers:


168

使用ipconfig getifaddr en1无线或ipconfig getifaddr en0以太网。

更新

ipconfig getifaddr en0 wifi接口的默认设置。


7
这显示了我的(到路由器的)内部IP地址(例如192.168.1.xxx),而不是外部IP地址。(与下面的大多数其他答案一样。)
ShreevatsaR 2015年

2
没为我工作:(
Naveed Abbas

2
ifconfig显示所有接口及其IP
aralar '16

4
回声外部IP:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb

30
它已经改变了很多年,“ ipconfig getifaddr en0”是wifi接口的默认值
Marek Szmalc

98

以下内容适用于10.8和10.10优胜美地。

ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' 

如果发现以上内容为您提供了多个答案,请将以下内容保存到脚本中,然后运行它

ip_address.sh

#!/usr/bin/env bash

dumpIpForInterface()
{
  IT=$(ifconfig "$1") 
  if [[ "$IT" != *"status: active"* ]]; then
    return
  fi
  if [[ "$IT" != *" broadcast "* ]]; then
    return
  fi
  echo "$IT" | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
}

main()
{
  # snagged from here: https://superuser.com/a/627581/38941
  DEFAULT_ROUTE=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
  if [ -n "$DEFAULT_ROUTE" ]; then
    dumpIpForInterface "$DEFAULT_ROUTE"
  else
    for i in $(ifconfig -s | awk '{print $1}' | awk '{if(NR>1)print}')
    do 
      if [[ $i != *"vboxnet"* ]]; then
        dumpIpForInterface "$i"
      fi
    done
  fi
}

main

3
我认为应当是可以接受的答案,因为它不需要任何有线与无线规范。
Erik Nomitch

@ErikNomitch除外,它给了我2个答案
Zach Lysobey

啊,那我退缩了。@ZachLysobey
Erik Nomitch

这是最好的总体方法,但是有时需要在awk之前多做一些小小的尝试才能获得正确的答案,并且正确的答案可能会有所不同。
uchuugaka

我添加了一个脚本,应该可以解决这个问题。
布拉德·帕克斯

43

只需输入curl ifconfig.me终端即可。


1
为什么要下票?尽管它是外部IP,但该命令有效并且适用于我的ssh登录。
CousinCocaine

5
这是公共IP地址,也是我一直在寻找的地址。 ipconfig getifaddr en0用于本地IP。
abriggs,2015年

在HighSierra上,我必须以SUDO的身份运行它。除此之外,它还列出了外部IP地址。有关内部IP地址,请参见Brad Parks的答复
Vincent,

19

我已经在.aliases点文件中进行了此设置,以进行频繁的ip查找:

alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"

17

您可以执行以下操作:

输入ifconfigifconfig -a。此命令向您显示接口列表及其IP和MAC地址(仅在适用时才显示后者)。您也可以仅键入ifconfig en0ifconfig en1用于特定接口的配置(正如某人在其回答中所说,en0通常是有线以太网,而en1是WiFi接口)。

或者,netstat -i将列出所有接口,并向您显示已分配给每个接口的IP地址。

通常,当您在一个盒子上运行SSH守护程序时,它将在所有可用接口上侦听,即。您可以使用计算机上配置的任何IP地址通过SSH连接到该计算机(显然,这取决于防火墙规则)。如果您使用的是操作系统所谓的主接口和主IP地址,则可以使用以下scutil命令:

MacBook:~ scutil
> show State:/Network/Global/IPv4
<dictionary> {
  PrimaryInterface : en0
  PrimaryService : C0550F84-5C07-484F-8D62-C8B90DC977D8
  Router : 10.103.4.1
}
> show State:/Network/Interface/en0/IPv4
<dictionary> {
  Addresses : <array> {
    0 : 10.103.4.234
  }
  BroadcastAddresses : <array> {
    0 : 10.103.4.255
  }
  SubnetMasks : <array> {
    0 : 255.255.255.0
  }
}

请注意,以上内容即使是命令行命令,也是交互式的(因此您先运行scutil然后在其中输入自己的命令)。第一个show命令告诉您操作系统的主要接口名称(即,它将是“系统偏好设置” /“网络偏好设置”窗口中列表顶部的名称)以及默认路由器的IP地址。第二个show命令采用State:/Network/Interface/<ifname>/IPv4参数(在本例中为en0),并为您分配了IP地址。您正在“地址”数组中寻找地址,其他两个条目是广播地址和网络掩码。

希望能有所帮助,但是如果不清楚,请告诉我。


1
感谢您的回答。我写了一个快速脚本来获取IP的主要接口:echo "show State:/Network/Interface/$(echo 'show State:/Network/Global/IPv4' | scutil | grep 'PrimaryInterface ' | sed 's/ PrimaryInterface : //')/IPv4" | scutil | pcregrep -Mo1 " Addresses : <array> {\n 0 : ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"
DC_15年

4

要获取面向Internet的计算机的IP地址,请执行以下操作:

if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'`
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'

即使您有多个接口处于活动状态,即使您不知道哪个接口实际上是默认网关,它也应能正常工作。


这将获得内部网络IP地址(例如:192.168.0.*),而不是暴露于Internet的外部IP地址。)
SimplGy 2015年

感谢您的反馈。您能告诉我您是哪个版本的操作系统吗?您能提供我的输出netstat -nr | grep default吗?
2015年

这将获得服务入站/出站流量的接口的IP。如果您落后于NAT,那将提供您的LAN地址,而不是WAN地址。但是它可以用于许多目的,并且对网络没有帮助。
folex

1

仅作记录,您可以制作一个包含以下内容的bash脚本,该脚本为您提供外部IP地址

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo

3
默认情况下,wget它不是macOS的一部分,需要从非Apple来源安装。
user3439894

问题是macOS特定的吗?默认情况下,它已安装在许多Linux发行版中。
user702846

该站点是有关Apple硬件和软件的,因此假定为macOS和iOS。
grg

为此,默认的macOS命令将使用curl:curl -s http://ipecho.net/plain; echo
thibmaek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.