Вы можете использовать sscanf()
из стандартной библиотеки Си. Вот пример того, как получить ip и порт в виде строк, предполагая, что часть перед адресом постоянна:
#include <stdio.h>
int main(void)
{
const char *input = "XFR 3 NS 207.46.106.118:1863 0 207.46.104.20:1863\r\n";
const char *format = "XFR 3 NS %15[0-9.]:%5[0-9]";
char ip[16] = { 0 }; // ip4 addresses have max len 15
char port[6] = { 0 }; // port numbers are 16bit, ie 5 digits max
if(sscanf(input, format, ip, port) != 2)
puts("parsing failed");
else printf("ip = %s\nport = %s\n", ip, port);
return 0;
}
Важными частями строк форматирования являются шаблоны сканирования %15[0-9.]
и %5[0-9]
, которые будут соответствовать строке длиной не более 15 символов, состоящей из цифр или точек (т. Е. IP-адреса не будут проверяться на корректность ) и строка длиной не более 5 цифр соответственно (что означает, что будут проходить недопустимые номера портов выше 2 ^ 16 - 1).