Получение собственного IP

Существует ли способ получить собств. IP, выданнный через DHCP, одной командой (без парсинга вывода ifconfig)? И как получить адрес шлюза - ifconfig его не показывает, тут и парсить нечего даже...

/var/lib/dhcp/dhcp.leases

/var/lib/dhcp/dhcp.leases
Also, use dbus binding for you DHCP client

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Парсить всё равно хоть что то

Парсить всё равно хоть что то да придётся. Но можно построить конвейер и делать это "одной командой" :)

GateWay

_Andrey написал(а):
можно построить конвейер

Как практически может выглядеть конвеер для получения адреса шлюза?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

:)

Вроде парсить вывод ifconfig все таки удобней...

/sbin/ifconfig ВАШ_ИНТЕРФЕЙС|grep "inet addr"|awk '{print $3}'|cut -d ':' -f 2

ну и по аналогии

/sbin/ifconfig НУЖНЫЙ_ИНТЕРФЕЙС|grep "inet addr"|awk '{print $2}'|cut -d ':' -f 2

Agressor написал(а): парсить

Agressor написал(а):
парсить вывод ifconfig все таки удобней

Удобней/не удобней - не в этом дело, шлюз-то ifconfig не показыват :(

Цитата:
/sbin/ifconfig ВАШ_ИНТЕРФЕЙС|grep "inet addr"|awk '{print $3}'|cut -d ':' -f 2

Это бродкаст, он не нужен

Цитата:
/sbin/ifconfig НУЖНЫЙ_ИНТЕРФЕЙС|grep "inet addr"|awk '{print $2}'|cut -d ':' -f 2

А это IP, с ним всё понятно...

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Spoiler

Spoiler написал(а):
Удобней/не удобней - не в этом дело, шлюз-то ifconfig не показыват :(
Цитата:
/sbin/ifconfig ВАШ_ИНТЕРФЕЙС|grep "inet addr"|awk '{print $3}'|cut -d ':' -f 2

Это бродкаст, он не нужен

Как это не показывает?
А почему тогда у меня это шлюз? У нас разный ifconfig?
А... потому что у меня эти операции делаються на ppp интерфейсе, и там P-t-P == Gateway
Тогда так

ip route show |grep "default via"|awk '{print $3}'|cut -d ':' -f 2

В чем проблема так?

Tnx!

Agressor написал(а):
В чем проблема так?

Так нормуль. Хотя мне кажется достаточно странной ситуация, что нет для этого системных средств (ну, скажем, в составе какого-нить неттуулз, нетутилз или ещё там чего). Впрочем, это уже лирика, а стал быть оффтоп. Спасибо!

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Что за трехэтажный мат ip

Что за трехэтажный мат

ip route show to 0.0.0.0/0 | awk '{print $3}'

Не грусти, товарищ! Всё хорошо, beautiful good!

одноэтажный мат :)

winterheart написал(а):
ip route show to 0.0.0.0/0 | awk '{print $3}'

Ну, или так ip r | awk '/default/{print $3}' А вот подскажите, pls, как модифицировать конвеер, чтоб мой IP получался без младшего октета (т.е. x.x.x. вместо x.x.x.x)?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Зачем?

Зачем?

Не грусти, товарищ! Всё хорошо, beautiful good!

winterheart

winterheart написал(а):
Зачем?

Чтобы удалять паразитный маршрут, получаемый по DHCP, который представляет из себя подсеть x.x.x.0/24. Так что, если с конвеера будет приходить x.x.x., мне останется лишь сконструировать команду, удаляющую данную запись из таблицы маршрутизации
P.S. А почему вы спрашиваете, что от этого зависит?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

:)

Spoiler написал(а):
winterheart написал(а):
Зачем?

А почему вы спрашиваете, что от этого зависит?

Наверное потому что все это делается на Linux, а в нем как известно одну задачу зачастую можно выполнить несколькими способами,
котрые могут быть как сложными, так и простыми (оптимальными/неоптимальными).
А если будет известно что хотите получить в конечном результате - то возможно вам предложат самое оптимальное решение вашей задачи,
а не будут играть в угадайки.

Spoiler написал(а): _Andrey

Spoiler написал(а):
_Andrey написал(а):
можно построить конвейер

Как практически может выглядеть конвеер для получения адреса шлюза?

Например так

~ # route | grep 'default' | cut -d ' ' -f 10

Или так

~ # ip route show table main | grep default | cut -d ' ' -f 3

Наверняка если напрячь моск то можно и что нибудь менее угловатое придумать, просто как то лениво, при том, что и этого достаточно :)

Upd: Ой :) я и не заметил, что всё уже до меня напридумывали :) Автору: если проблема решена - поставь галочку :) ( [SOLVED] в заголовке)

_Andrey написал(а): route |

_Andrey написал(а):
route | grep 'default' | cut -d ' ' -f 10

В этом варианте выдаётся не IP, а доменное имя

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Ой, простите пожалста :)

Ой, простите пожалста :) действительно не учел этот момент - у меня default gateway не имеет доменного имени, потому и показывает ip адрес. Вот так должно быть гуд

~ # route -n | tail -n 1 | cut -d ' ' -f 10

P.S. А второй вариант не подходит? Он по максимуму позволяет избежать всяких подобных нюансов, связанных с разными "сетевыми обстоятельствами". Кстати вот товарищ winterheartпредложил вариант куда лучше моего :)
Кстати, вот еще

Spoiler написал(а):
А вот подскажите, pls, как модифицировать конвеер, чтоб мой IP получался без младшего октета (т.е. x.x.x. вместо x.x.x.x)?

~ # echo `route -n | tail -n 1 | cut -d ' ' -f 10 | cut -d '.' -f 1-3`.

echo, "``" и "." можно и убрать - оно надо только чтобы эту самую точку дописать в конце :)

Tnx! Для удаления паразитного

Tnx! Для удаления паразитного маршрута составил такую команду: route del -net `ifconfig eth0 | grep "inet addr" | awk '{print $2}' | cut -d ':' -f 2 | cut -d '.' -f 1-3`.0 netmask 255.255.255.0 dev eth0, вот только оно как-то, ммм..., не эстетично что-ли - создаётся впечатление какой-то избыточности... Можно ли это упростить/оптимизировать?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Каждый раз такое писать

Каждый раз такое писать неудобно, согласен, так запихните это в скрипт и дёргайте хоть одной буковкой - всё зависит от того как назовёте

ppp при установлении

ppp при установлении соединения запускает /etc/ppp/ip-up, которому передается удаленный ip

?

kaf1 написал(а):
ppp при установлении соединения запускает /etc/ppp/ip-up, которому передается удаленный ip

Кхм... Скажем так, передаётся не только удаленный ip (всего 6 параметров), вот только при чём здесь вообще PPP?!?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Spoiler,

а можете показать вывод команды ip -4 r s dev eth0 с выделением
паразитного маршрута?

ip -4 r s dev eth0

ip -4 r s dev eth0 :

88.147.128.127  scope link  metric 2 
95.84.22.0/24  proto kernel  scope link  src 95.84.22.154  metric 2 
default via 88.147.128.127  metric 2

route -n :

88.147.128.127  0.0.0.0         255.255.255.255  UH  2  0  0  eth0
95.84.22.0      0.0.0.0         255.255.255.0    U   2  0  0  eth0
127.0.0.0       127.0.0.1       255.0.0.0        UG  0  0  0  lo
0.0.0.0         88.147.128.127  0.0.0.0          UG  2  0  0  eth0

После выполнения моей команды route del -net `ifconfig eth0 | grep "inet addr" | awk '{print $2}' | cut -d ':' -f 2 | cut -d '.' -f 1-3`.0 netmask 255.255.255.0 dev eth0, в выводе route -n данный маршрут исчезает, а вот ip -4 r s dev eth0 показывает, что ничего не измененилось. И ещё - подскажите, pls, почему команда выполняется только "вручную", а из ф-ции postup()/etc/conf.d/net) не работает?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Я лично вписываю полный путь

Типа:

Oldroute="`/sbin/ip -4 r s dev eth0 | /bin/grep src | /bin/awk '{print $7}'`"
/sbin/ip r del "${OldRoute}" dev eth0

Не серчайте на ошибки, которые могут быть - у мя вывод команды несколько отличается от Вашего.

willy написал(а): Я лично

willy написал(а):
Я лично вписываю полный путь

Если вы намекаете на уровень привилегий (когда-то, разбираясь с настройкой VPN, наткнулся на это - в скриптах типа ip-up действительно требовалось указывать полный путь, или экспортировать набор путей), но в /etc/init.d/net этого вроде бы не требуется - в других конфигурациях сети у меня всё выполняется без полных путей

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Посмотрел сетевой обмен через

Посмотрел сетевой обмен через wireshark, и кажется, понял, почему route и ip показывали по-разному - они просто запускались в разное время, и dhcpcd в этом промежутке успевал восстановить удалённое мною. Тогда другой вопрос - а что заставляет dhcpcd так часто обращаться к серверу? Не связанно ли это с неполучением от сервера параметров ipv6?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Нет, не на привилегии.

В man runscript есть подсекция

man runscript написал(а):
ENVIRONMENT
runscript sets the following environment variables for use in the service scripts:

RC_SVCNAME Name of the service.

RC_RUNLEVEL Current runlevel that rc is in.

RC_BOOTLEVEL Boot runlevel chosen. Default is boot.

RC_DEFAULTLEVEL Default runlevel chosen. Default is default.

RC_SYS A special variable to describe the system more. Possible values are OPENVZ, XENU, XEN0, UML and VSERVER.

Вероятнее всего - вся соль в этих переменных.

dhcpcd

willy написал(а):
соль в этих переменных

Спасибо за ваши быстрые ответы, но наши с вами посты наложились, и вы, скорее всего, не обратили внимания на странное поведение клиента DHCP, описанное мною постом выше. Сервером DHCP является DSL-модем, а в dhcpcd.conf есть строчка require dhcp_server_identifier - не оно ли воду мутит так, что клиент через каждый десяток секунд дёргает сервер?
P.S. А команда из /etc/conf.d/net всё же выполнялась, просто dhcpcd быстренько это дело восстанавливал...

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".