Source
int zbx_parse_serveractive_element(const char *str, char **host, unsigned short *port, unsigned short port_default)
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
/******************************************************************************
* *
* Purpose: checks if string is IPv4 address *
* *
* Parameters: ip - [IN] *
* *
* Return value: SUCCEED - input is IPv4 address *
* FAIL - otherwise *
* *
******************************************************************************/
int zbx_is_ip4(const char *ip)
{
const char *p = ip;
int digits = 0, dots = 0, res = FAIL, octet = 0;
zabbix_log(LOG_LEVEL_DEBUG, "In %s() ip:'%s'", __func__, ip);
while ('\0' != *p)
{
if (0 != isdigit(*p))
{
octet = octet * 10 + (*p - '0');
digits++;
}
else if ('.' == *p)
{
if (0 == digits || 3 < digits || 255 < octet)
break;
digits = 0;
octet = 0;
dots++;
}
else
{
digits = 0;
break;
}
p++;
}
if (3 == dots && 1 <= digits && 3 >= digits && 255 >= octet)
res = SUCCEED;