2009-05-10 2 views
21

Каждый сейчас и снова, мне нужно, чтобы запустить сервер разработки Django, и он просматриваться другими машинами на моей сети, как описано здесь:Как найти IP-адрес моего компьютера с помощью оболочки bash?

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

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

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

ответ

46
ifconfig en0 | grep inet | grep -v inet6 

Выход выше, как ожидается, в следующем виде:

инет 192.168.111.1 NETMASK 0xffffff00 широковещательный 192.168.111.255

Добавьте оператор AWK для печати второй столбец, чтобы избежать (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' 
+0

Aha, gotcha, это выглядит как хороший способ сделать это. –

+1

Я немного поправил бит, так как это не работало для меня. У меня есть ifconfig en1 | grep inet | grep -v inet6 | cut -c 7-17' –

+1

Да, я изменил разрез, потому что резка по расположению персонажей не казалась мне настолько надежной. –

3

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

15

Вы уже могли бы знать, но работает

python manage.py runserver 0.0.0.0:8000 

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

Есть ли причина, по которой вам необходимо указать свой IP-адрес?

+0

Звучит здорово, хотя, похоже, он не работает в моей сети (другие машины, похоже, не видят 0.0.0.0). –

+2

Нет, вы по-прежнему подключаетесь к своему обычному IP-адресу. Например, если вы запустили эту команду на своем компьютере, а ваш IP-адрес - 192.168.0.100, машины в вашей сети по-прежнему будут обращаться к вашей машине через 192.168.0.100. Ввод 0.0.0.0 просто автоматизирует задачу, а не ищет IP. Это то, что вы хотите. –

+2

Да, только что видел, я никогда не отвечал на это. Теперь я использую ваш метод все время, он работает отлично. Немного стыдно, я не понимал, что мне не нужны другие машины для подключения к 0.0.0.0. –

0

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

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

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

+0

Скопируйте/вставьте в mac osx терминал. Нет результатов. –

5

Лучшее решение было бы:

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

Работает для меня. Если вам не нужен 127.0.0.1 IP, вы можете использовать «head -n1» для получения верхнего результата. Не может быть портативным, не уверен. Но он выполнил свою работу. – DrewVS

+0

Я бы не сказал «лучше». Я скопировал непосредственно в терминал mac osx. Я не получил никаких результатов. –

4

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

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

Это один из самых чистых ответов, который также почти работает на OS X, хотя мне, скорее, нужно 'en0' вместо' en1' (или просто отбросить сетевое имя, чтобы получить все). – natevw

3

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

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

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

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

1

Попробуйте (если вы являетесь пользователем Arch)

resolveip -s $HOSTNAME 

Alternative

Для получения 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) на $ (имя хоста).

+0

У меня, похоже, нет 'resolip' на моей машине Mac OS X (10.7.3). –

+0

У меня нет '$ HOSTNAME', и если я делаю' resolveip -s $ (имя хоста) ', он дает 127.0.0.1, который ожидается во многих случаях, поскольку/etc/hosts обычно содержат такой тип recprd. – ony

+0

Простите меня, я использовал Arch Linux в тот момент, и я не упоминал об этом. Сообщение обновлено. – oblalex

3

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

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

Это не может быть столь же элегантно, как некоторые из других решений, но он работает на системах Linux и более приятно смотреть на чем регулярное выражение:

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

Тхи должны работать так же как и другие команды, которые я уже видел:

ifconfig eth0 | grep inet | awk '{print $2}' | cut -d':' -f2 
  • Заменить eth0 с нужным интерфейсом (eth0, eth1, wlan0 ...)

Я думаю, вы также вписываете: ̶

̶ ̶ ̶ ̶ HostName-я ̶ | ̶ CUT ̶-̶d̶'̶ ̶'̶ ̶-̶f̶1̶ ̶

+2

Это правильный ответ – user000001

+0

Если вам нужен только первый IP-адрес, вы можете просто использовать 'hostname -i'. –

+1

имя хоста -i возвращает мне 127.0.0.1 – ederollora

0

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

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

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

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

Здесь присвоив его колотить переменный сценарий:

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

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

3

На 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/

+1

El Capitan?!? * Хорошо дедушка! * –

Смежные вопросы