LINUX.ORG.RU

Найти неправильный ip-адресс

 , ,


0

1

Всем здраствуйте! Необходимо выполнить задание, и найти в .log файле неправильный ip-адрес. В .log файле 3 миллиона строк. Нужно по учебе.



Последнее исправление: buusty (всего исправлений: 1)

Мне не нужно, у меня ip-адреса правильные

Harald ★★★★★
()

тебе в раздел job

anonymous
()

читай файл построчно и пингуй что прочитал - не пингуется - неправильный

anonymous
()

Регулярки

//0-255
"([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

Удачи.

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

читай файл построчно и пингуй что прочитал - не пингуется - неправильный

Зашёл, чтобы прочитать этот коммент. Раз критериев правильности не указано, значит он только один: «работает» или «не работает» ip адрес.

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

Мне зачет? :)

Незачёт.

$ ping -c 4 3002657030
PING 3002657030 (178.248.233.6) 56(84) bytes of data.
64 bytes from 178.248.233.6: icmp_seq=1 ttl=58 time=26.2 ms
64 bytes from 178.248.233.6: icmp_seq=2 ttl=58 time=30.0 ms
64 bytes from 178.248.233.6: icmp_seq=3 ttl=58 time=29.3 ms
64 bytes from 178.248.233.6: icmp_seq=4 ttl=58 time=28.8 ms

--- 3002657030 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 26.176/28.576/30.021/1.450 ms

http://3002657030/

im-0
()
Последнее исправление: im-0 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Тему бы почитал для начала…

Почитал. Твой код работает неправильно:

$ echo "3002657030" | egrep -v '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
3002657030

При этом 3002657030 - это настолько правильный IP-адрес, что его можно успешно пинговать и даже использовать в URL.

im-0
()
Ответ на: комментарий от im-0

А теперь почитай вывод команды ping из своего же комментария и ужаснись, насколько ты только что засельфовнился.

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

А теперь почитай вывод команды ping из своего же комментария и ужаснись, насколько ты только что засельфовнился.

При чём тут вывод команды ping? Речь то про проверку валидности строкового представления IP-адресов.

Твой код работает неправильно.

im-0
()
Ответ на: комментарий от anonymous

Я просто пытаюсь намекнуть, что валидация строки с IP-адресом - это чуть более сложная задача, чем может показаться на первый взгляд. Регулярки (как минимум настолько простой) тут недостаточно. Проще попробовать честно распарсить.

im-0
()
Ответ на: комментарий от im-0

$ ping -c 4 3002657030

Ты какую-то херню написал. Требуется валидировать ip, а не доступность ресурса по ip.

anonymous
()
Ответ на: комментарий от im-0

Проще попробовать честно распарсить

Ты прав, конечно. Но ТСу скорее всего «по учёбе» такие тонкости не требуются и даже может быть вредно (господин преподаватель не оценит, что его натыкали носом в собственное невежество).

no-such-file ★★★★★
()
$ErrorActionPreference = 'SilentlyContinue'

$ips = '127.0','127.0.0','127.0.0.0','127.0.0.1','127.0.0.256'

foreach ($ip in $ips) {

    $test = [ipaddress]::parse($ip).address
    if (!$test) { "wrong ip: $ip" }
    $test = $null

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

Вообще-то IP-адреса многими способами можно было (и сейчас ещё можно) представлять. Там есть варианты <тупо-одно-32-битное-число>, 10.<24-битное-число> и так далее. Из каких-то древних BSD ещё повелось. Так что 3002657030 — вполне себе IP-адрес. Ping через inet_aton() эти форматы понимает. Глянь в мануал к inet_aton().

Там ещё есть 0 — аналог 127.0.0.1.

i-rinat ★★★★★
()

Перебирай 3 млн. строк руками. Надоест-почитаешь, как автоматизировать

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