LINUX.ORG.RU

как сделать проверку IP адреса в shell


0

1

в общем стоит такая задача...сделал скрипт который перед запуском программы просит ввести IP адрес...этот адрес присваевается переменной и она потом подставляется в нужное место...но вот вопрос.как сделать проверку что вводится именно IP вида xxx.xxx.xxx.xxx че то не могу никак допереть...помогите пожалуйста

Ответ на: комментарий от Deleted

Только отчасти, надо ещё проверять, чтобы не больше 255 было

Hokum ☆☆☆☆ ()
Ответ на: комментарий от Deleted

а как еще сделать так чтоб если неправильно ввел,то скрипт не продолжал выполняться а как бы возвращался снова к вводу...?

dimitry80 ()
Ответ на: комментарий от AS

^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\$
Обычно пользую такое для поиска IP в тексте. Правда, пропускает и 333.444.555.666... но в большинстве случаев хватает.

NightSpamer ()

Если борода лежит параллельно горизонту, то можно использовать Net::IP::Match::Regexp, а так костылей выше хватит.

as33 ★☆☆ ()
Ответ на: комментарий от MKuznetsov
ipcalc
If 'ipcalc' is not a typo you can run the following command to lookup the package that contains the binary:
command-not-found ipcalc
-bash: ipcalc: command not found
Hokum ☆☆☆☆ ()
Ответ на: комментарий от Hokum
$ ipcalc
ipcalc: ip address expected
Usage: ipcalc [OPTION...]
  -c, --check         Validate IP address for specified address family
  -4, --ipv4          IPv4 address family (default)
  -6, --ipv6          IPv6 address family
  -b, --broadcast     Display calculated broadcast address
  -h, --hostname      Show hostname determined via DNS
  -m, --netmask       Display default netmask for IP (class A, B, or C)
  -n, --network       Display network address
  -p, --prefix        Display network prefix
  -s, --silent        Don't ever display error messages

Help options:
  -?, --help          Show this help message
  --usage             Display brief usage message

ЧЯДНТ?

Slavaz ★★★★★ ()
Ответ на: комментарий от Slavaz
~ # yast2 --install ipcalc

 YaST2 - sw_single @ sles11

  Starting the Software Manager

   x   ┌───────────────────────────────────────────────────────────────┐
   x   │  Error                                                        │
       │  ┌──────────────────────────────────────────────────────────┐ │
       │  │Following packages haven't been found on the medium:      │ │
       │  │ipcalc                                                    │ │
       │  │                                                          │ │
       │  │                                                          │ │
       │  │                                                          │ │
       │  │                                                          │ │
       │  │                                                          │ │
       │  │                                                          │ │
       │  └──────────────────────────────────────────────────────────┘ │
       │                                                               │
       │                             [OK]                              │
       └───────────────────────────────────────────────────────────────┘


 [Help]                 [Back]                 [Abort]                 [Next]

 F1 Help  F9 Abort
Hokum ☆☆☆☆ ()
Ответ на: комментарий от Slavaz

Бэээ. Да ipcalc мне НЕ НУЖЕН.

awk 'BEGIN { FS = "." }; /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ { if (($1 <= 255) && ($2 <= 255) && ($3 <= 255) && ($4 <= 255)) print("ok") } '

Хоть awk чуть вспомнил.

a_n ()
Ответ на: комментарий от dimitry80

Единственная неприятность, что если нужно что-от симпатичное выдать, при несоответствии IP, придётся чуть извратиться.

а как бы возвращался снова к вводу...?

Как-бэ намекнул?

man read. Там есть пример.

a_n ()
Ответ на: комментарий от K-Vrat

Там 4 поля фиксированно... Ну, хотя да. У меня вышло чуть по-китайски. :-\

a_n ()
Ответ на: комментарий от Deleted

а как сделать так чтоб выборка шла именно 4-х трехзначных последовательностей и чтоб каждая из 4-х не превышала 255??

dimitry80 ()
Ответ на: комментарий от dimitry80

а все выше почитал....спасибо огроменное!!!выручили очень!

dimitry80 ()

Можно попробовать его пингануть. Хотя, получается, что адрес может быть корректным, но не рабочим (допустим, не выданным еще, или комп в дауне)

dumal ★★ ()
Ответ на: комментарий от dumal

Нельзя. Отправка ответа ни ICMP запрос пинга может быть запрещена тем, кого пытаются пинговать. К тому же, я не нашёл у стандартного пинга опции, отключающей разрешение адресов.

a_n ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.