LINUX.ORG.RU

Валидатор IP-адресов

 , , ,


2

3

Наваял софтину для проверки правильности написания IP-адресов (IPv4 и IPv6) на Си. Ничего сложного и оригинального, возможно, велосипед с квадратными колёсами, но это я в качестве тренировки, чисто для себя, так как на C пишу мало.

Цель написания — получить отзывы, поэтому с удовольствием жду обоснованную критику, лучше с патчами.

Если кому интересно, то исходники тут.

Документация полный отстой! Ничего не ясно :D

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

Ну да… нужно, кстати, посмотреть, как она правильно делается для проектов на Си.

post-factum ★★★★★ ()

cat Makefile
CFLAGS=-O3 -std=c99 -W -Wall -pedantic -D_GNU_SOURCE


Но почему?

tazhate ★★★★★ ()
	if (ipv4 == 1)
		res = inet_pton(AF_INET, address, &(sa.sin_addr));

годный валидатор! аж пельмешкой подавился

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

Зато работает. Альтернативой было клепать регекспы, но имел я такое счастье в баш-скриптах на продакшене.

post-factum ★★★★★ ()
Последнее исправление: post-factum (всего исправлений: 1)
Ответ на: комментарий от post-factum

слишком много ненужных if

res = inet_pton(ipv4 == 1? AF_INET : AF_INET6, ddress, &(sa.sin_addr));

итп

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

слишком много ненужных ==

res = inet_pton(ipv4 ? AF_INET : AF_INET6, address, &(sa.sin_addr));
;)

beastie ★★★★★ ()
Ответ на: комментарий от post-factum

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

а в чем проблема? главное - тесткейсы сделать

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

Ну я так подумал — есть же готовая функция, почему её не использовать.

post-factum ★★★★★ ()

Садись, Сидоров, 3

% : ping 127.1 -qc 1 && echo Alive
Alive
% ./yaiv -4 -a 127.1
127.1: Malformed IPv4 address

zolden ★★★★★ ()

Может, и не велосипед

Но колеса треугольные. Открой для себя мир PCRE и сократи свой код в M раз.

PS Я вижу ты уже высказался насчет регекспов, нуууу... Что сказать? Клепай дальше в том же духе на здоровье.

Если жеват кактус долго-долго то он на вкус становится как текила :)

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

слишком много ненужных if

Откомпилируется одинаково же.

sdio ★★★★★ ()
Ответ на: комментарий от post-factum

а, у тебя там кстати buffer overflows :)

вот тебе, на затравку, как оно должно было бы быть, если смотреть с моей колокольни: http://pastebin.com/iZZaPdEu

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

не глумись, братюнь

% : ping 127.0.127 -c 1 && echo 'Alive!!!'
Alive!!!

zolden ★★★★★ ()

Названия констант режут слух.

encyrtid ★★★★★ ()

Не работает.

$ ./yaiv -4 -a 0x7f.0x1
0x7f.0x1: Malformed IPv4 address

$ ping -c 1 0x7f.0x1
PING 0x7f.0x1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.020 ms

--- 0x7f.0x1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.020/0.020/0.020/0.000 ms
Deleted ()
Ответ на: комментарий от Deleted

И так не работает.

$ ./yaiv -4 -a 017700000001
017700000001: Malformed IPv4 address

$ ping -c 1 017700000001
PING 017700000001 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.016 ms

--- 017700000001 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.016/0.016/0.016/0.000 ms
Deleted ()
Ответ на: комментарий от sdio

Откомпилируется одинаково же.

выглядит симпатичнее, читается лучше - имхо это тоже немаловажно

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

beastie

а, у тебя там кстати buffer overflows :)

Это там, где работа со строками? Можно детальнее?

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

Всегда кажется, что на аватаре плачет синий мишка.

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

у вас система не феншуйная. в линупсовом man-е чотко вписано:

       AF_INET
              src points to a character string containing an IPv4 network address in dotted-decimal format, «ddd.ddd.ddd.ddd», where ddd
              is  a decimal number of up to three digits in the range 0 to 255.
hizel ★★★★★ ()
Ответ на: комментарий от post-factum

третий аргумент inet_pton:

для v4 — это struct in_addr → 32 бита

для v6 — это struct in6_addr → 128 бит

а у тебя и там и там in_addr → переполнение в случае v6

beastie ★★★★★ ()

EBAD! предлагаю переименовать директивы.

system-root ★★★★ ()
Ответ на: комментарий от beastie

в sockaddr_in после in_addr есть неиспользуемое место.

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

да, но лучше сразу правильно, чем потом баги ловить.

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

Мне, собсно, в другом формате валидация и не нужна. Хотя интересно, почему оно не хавает.

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

Хотя интересно, почему оно не хавает.

в смысле не хавает? по моему наоборот хавает все подряд.

hizel ★★★★★ ()
Ответ на: комментарий от hizel
[pf@eternity]:[~/work/devel/yaiv][0]% ./yaiv -4 -a 0x7f.0x1
0x7f.0x1 is valid IPv4 address

Хе, пашет. Merci.

post-factum ★★★★★ ()

Какой же это валидатор, когда нигде даже не описаны критерии валидности.

aedeph_ ★★ ()
Ответ на: комментарий от post-factum

Почитай RFC или как. Найдешь там про форматы, расскажешь.

aedeph_ ★★ ()

а чем оно лучше inet_pton ?

Reset ★★★★★ ()
Ответ на: комментарий от post-factum

как скажешь, братиш
Каковы ваши дальнейшие планы? валидатор сетей? Поделись RFC если найдешь, а то был недавно тред на эту тему, но rfc там не нашли

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

Перечитай внимательно исходный пост треда, чтобы увидеть, что это было just for fun, поэтому какие тут планы.

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

Я зачем этот hello world под GPL публиковать и по поводу него создавать тред на лоре? Я то думал, что тут мегаалгоритм, который уделывает по скорости inet_pton в N раз, а тут это ....

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