Автор | Сообщение |
|
| |
Пост N: 4022
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.14 18:28. Заголовок: Валидность ввода IP адреса
Нет ли чего то готового что бы самопал не писать ? Ну что бы такие не верные адреса проверять: 123.234.1 DDD.145.1.1 555.345.456.123
|
|
|
Ответов - 8
[только новые]
|
|
|
| постоянный участник
|
Пост N: 973
Зарегистрирован: 27.01.07
|
|
Отправлено: 21.05.14 21:05. Заголовок: IPv4 - не проблема н..
IPv4 - не проблема написать самопал. Каждая из 4-х частей - число от 0 до 255. Этого, имхо, достаточно. А вот IPv6... :)
|
|
|
|
| |
Пост N: 4023
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.14 21:09. Заголовок: PSP пишет: IPv4 - н..
PSP пишет: цитата: | IPv4 - не проблема написать самопал |
| Так и сделаю :)
|
|
|
|
| постоянный участник
|
Пост N: 3388
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.05.14 21:24. Заголовок: Смотри примеры в :..
Смотри примеры в :\MiniGUI\SAMPLES\BASIC\IPADDRESS
|
|
|
|
| |
Пост N: 4045
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.05.14 14:55. Заголовок: Наваял на скорую вот..
Наваял на скорую вот такой исходничек по проверке IP адреса. Func isValidIPadress(Cip) local ret:=.t. local n n:=numtoken(Cip,".") if n#4 return .f. endif For n=1 to 4 if !isdigit(token(Cip,".",n)) return .f. endif if val(token(Cip,".",n))<0 .or. val(token(Cip,".",n))>255 return .f. endif Next return ret Что скажете ? PS Если можно проще сделать покажите как.
|
|
|
|
| |
Пост N: 285
Зарегистрирован: 16.12.08
|
|
Отправлено: 27.05.14 16:55. Заголовок: Можна попробовать С ..
Можна попробовать С вариант (3 функции): //#include "hmg.ch" REQUEST HB_GT_WIN_DEFAULT Function main() Local dd:= "192.168.22.322" dd1:="192.168.22.122" if (VALIDADDRESS(dd) == 1) ? "true" else ? "false" endif if (ISVALIDIPADDRESS(dd1) < 0) ? "false" else ? "true" endif wait Return .T. #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( VALIDADDRESS ) { int _retData = 1; const char * address = (const char*) hb_parc( 1 ); if (address == NULL || address == '\0') hb_retni((int) 0); int nibble, octets = 0, flag = 0;; char* holder = (char*)malloc(strlen(address)+1); strcpy(holder, address); char* byte = strtok(holder, "."); while(byte != NULL) { octets++; if (octets > 4) { flag = 1; break; } nibble = atoi(byte); if ((nibble < 0) || (nibble > 255)) { flag = 1; break; } byte = strtok(NULL, "."); } free(holder); if(flag || octets < 4) hb_retni((int) 0); else hb_retni((int) 1); } /* int isValidIpAddress_c(const char *ipAddress) { struct sockaddr_in sa; return inet_pton(AF_INET, ipAddress, &(sa.sin_addr)); } */ HB_FUNC( ISVALIDIPADDRESS) { register const char* pos = (const char*) hb_parc( 1 ); register unsigned char ch = *pos; register unsigned short count = 0; if (NULL == pos) hb_retni((int) 0); while (ch != NULL) { if (!((ch >= '0' && ch <= '9') || ch == '.')) hb_retni((int) 0); if (ch == '.') if (++count > 3) hb_retni((int) 0); ch = *++pos; } if (count == 3 && *--pos != '.') hb_retni((int) 1); hb_retni((int) 0); } #pragma ENDDUMP Функция isValidIpAddress работает но не на всех компиляторах.
|
|
|
|
| |
Пост N: 4047
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.05.14 16:58. Заголовок: santy пишет: Функци..
santy пишет: цитата: | Функция isValidIpAddress работает но не на всех компиляторах |
| Да сработало на MINGW. Спасибо за еще один вариант проверки.
|
|
|
|
| |
Пост N: 286
Зарегистрирован: 16.12.08
|
|
Отправлено: 27.05.14 17:28. Заголовок: santy пишет: /* int..
santy пишет: цитата: | /* int isValidIpAddress_c(const char *ipAddress) { struct sockaddr_in sa; return inet_pton(AF_INET, ipAddress, &(sa.sin_addr)); } */ |
| Я имел ввиду вот эту функцию. Дима попробуйте у себя может пройдёт. НЕ у всех есть inet_pton.
|
|
|
|
| |
Пост N: 4048
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.05.14 17:32. Заголовок: santy пишет: Я имел..
santy пишет: цитата: | Я имел ввиду вот эту функцию |
| Да с ней не собирается.
|
|
|
|