26

时不时地,我需要启动 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
4

17 回答 17

54
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 的前几个数字始终相同的 LAN 上(将 192.168.111 替换为您自己的数字)时,我使用以下命令获取当前 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'
于 2009-05-10T17:24:05.633 回答
15

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

python manage.py runserver 0.0.0.0:8000

使您的机器对网络上的每个人都可见。

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

于 2009-05-10T17:19:04.457 回答
7

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

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̶ ̶

于 2013-04-25T12:38:07.360 回答
5

最好的解决方案是:

ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
于 2011-12-25T22:23:37.530 回答
5

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

ifconfig en1 | grep inet | grep -v inet6 | cut -d" " -f2
于 2011-12-31T20:25:41.027 回答
4

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

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

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

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

于 2012-04-14T10:33:55.687 回答
4

在 Mac OS X 10.11.6 El Capitan(可能还有旧版本)上,您可以使用

ipconfig getifaddr <device>

,等<device>在哪里en0en1

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

于 2016-10-04T19:38:28.753 回答
3

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

于 2009-05-10T17:18:54.113 回答
3

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

 ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
于 2012-11-21T06:17:06.020 回答
2

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

ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | awk -F ':' '{print $2}'
于 2013-04-04T19:42:59.280 回答
1

试试这个(如果你是 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)。

于 2012-08-29T10:34:52.020 回答
1

使用默认接口查找 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 操作系统上测试

于 2018-12-12T20:53:20.793 回答
0

这是查找当前IP地址的解决方案:

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

仅在 Mac 上测试。

于 2010-10-23T11:46:15.020 回答
0

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

netstat -rn | gawk '/UG/ {print $NF}' | xargs ifconfig | gawk 'match($0,/inet addr:(.*) B/,a) {print a[1]}'
于 2015-02-13T20:09:49.367 回答
0

回顾:如果您想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的回答

于 2015-07-16T18:12:51.970 回答
0

仅测试Archlinux

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

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

由于命令语法或输出可能会有所不同,因此您可能需要针对系统上的工作进行更改。

于 2021-09-17T03:30:42.173 回答
0

在 Android Shell 上,我尝试过:

ifconfig eth0 | grep 'inet addr' | tr -d '^[A-Za-z]+$' | tr -s ':' | cut -d ':' -f 2
于 2021-12-09T02:32:42.907 回答