Подтвердить что ты не робот

Как найти IP-адрес компьютера с помощью оболочки bash?

Время от времени мне нужно запустить сервер разработки Django и просматривать его на других компьютерах в моей сети, как описано здесь:

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

Мой IP-адрес компьютера имеет тенденцию меняться каждый раз, поэтому Id любит иметь небольшой псевдоним оболочки или что-то, что выплескивает команду manage.py с моим текущим IP-адресом компьютеров, может быть, вот так:

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

Ответ 1

ifconfig en0 | grep inet | grep -v inet6

Ожидается, что вывод выше будет в следующем виде:

inet 192.168.111.1 netmask 0xffffff00 broadcast 192.168.111.255

Добавьте оператор awk для печати второго столбца, чтобы избежать использования cut (awk - довольно стандартный инструмент unix):

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

Я использую следующее, чтобы получить текущий IP-адрес в локальной сети, где первые несколько номеров IP всегда одинаковы (замените 192.168.111 на свои собственные номера):

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'

Ответ 2

Возможно, вы уже знаете, но запустите

python manage.py runserver 0.0.0.0:8000

делает вашу машину видимой для всех в сети.

Есть ли причина, по которой вам нужно указать свой IP?

Ответ 3

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

Ответ 4

Лучшим решением будет:

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

Ответ 5

Люди используют количество символов, чтобы вывести правильные столбцы из строки IP-адреса, но использование пробелов в качестве разделителя делает это более масштабируемым для разных IP-адресов длины...

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

Ответ 6

Это быстрый и грязный способ, который работает под OSX

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

В основном получить все интерфейсы с адресом IPV4, пропустить локальный хост, а затем получить первый интерфейс.

Также используйте путь к ifconfig. Я видел, как много сковородок script тормоз при использовании от ex. cron из-за сбоя PATH.

Ответ 7

ifconfig, вероятно, то, что вам нужно. Вам нужно либо запустить его через grep, чтобы отфильтровать некоторые из них.

Ответ 8

Следующая команда отлично работает для меня на RHEL 6.3:

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

Ответ 9

В Mac OS X 10.11.6 El Capitan (и, возможно, более старые версии) вы можете распечатать свой IP-адрес с помощью

ipconfig getifaddr <device>

где <device> - en0, en1 и т.д.

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

Ответ 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) на $(имя хоста), если хотите.

Ответ 12

Здесь находится решение найти текущий IP-адрес:

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

тестируется только на Mac.

Ответ 13

Это проверяет ваш интерфейс по умолчанию и использует его для извлечения первичного ip. Полезно, когда у вас много интерфейсов и тонны виртуальных IP-адресов:

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

Ответ 14

Recap: если вы хотите использовать copy/paste в командной строке и просто получите сетевой IP-адрес, вот что работает на Mac (на WiFi):

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

Здесь присваивается значение переменной bash script:

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

Это основано на ответах Valentin Rocher и Matt Kropmton

Ответ 15

Простая команда для точного определения 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}'

Проверено на всех ОС Unix