согласно моему предположению, когда открытие начал dhcp
в то время вы запрашиваете IP-адрес. Теперь, например.
При использовании udhcpc
(BusyBox:. Udhcp клиент ведет переговоры об аренде с сервером DHCP и уведомляет набор скриптов, когда арендные договоры получают или потеряли) * я обнаружить IP на интерфейсе wlan0, то я пишу первый ниже системы звоните для начала открытия на wlan0
system("udhcpc -i wlan0")
затем вызвать
GetIpAddress_system(ipaddress);//for getting ip address
так просто код
char ipaddress[16];
system("udhcpc -i wlan0")
GetIpAddress_system(ipaddress);//for getting ip address
printf("\nip address:%s",ipaddress);
источник находкой для GetIpAddress_system()
как ниже
static int GetIpAddress_system(char *myIp)
{
int retVal=0;
int size = 1;
struct ifreq *ifr;
struct ifconf ifc;
struct sockaddr_in sa;
char ip_add[24]={0};
int serversocket; /* Socket */
#define inaddrr(x) (*(struct in_addr *) &ifr->x[sizeof sa.sin_port])
#define IFRSIZE ((int)(size * sizeof (struct ifreq)))
/* Create socket for receiving */
if ((serversocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){
printf("socket() failed");fflush(stdout);
return -1;
}
else
{
ifc.ifc_len = IFRSIZE;
ifc.ifc_req = NULL;
do
{
++size;
/* realloc buffer size until no overflow occurs */
if (NULL == (ifc.ifc_req = realloc(ifc.ifc_req, IFRSIZE)))
{
retVal= -1;
break;
}
ifc.ifc_len = IFRSIZE;
if (ioctl(serversocket, SIOCGIFCONF, &ifc))
{
perror("ioctl SIOCFIFCONF");
retVal = -1;
break;
}
}while(IFRSIZE <= ifc.ifc_len);
if(0 == retVal)
{
ifr = ifc.ifc_req;
for (;(char *) ifr < (char *) ifc.ifc_req + ifc.ifc_len; ++ifr)
{
if (ifr->ifr_addr.sa_data == (ifr+1)->ifr_addr.sa_data)
{
continue; /* duplicate, skip it */
}
if (ioctl(serversocket, SIOCGIFFLAGS, ifr))
{
continue; /* failed to get flags, skip it */
}
if(strcmp(ifr->ifr_name,"wlan0") == 0)
{
strncpy(ip_add,inet_ntoa(inaddrr(ifr_addr.sa_data)),sizeof(ip_add));
break;
}
}
}
close(serversocket);
}
if(0 == retVal)
{
printf("%s\n",ip_add);
if(myIp)
{
memset(myIp,0,15);
snprintf(myIp,15,"%s",ip_add);
}
if(ip_add[0])
{
return 0;
}
else
{
return -1;
}
}
else
{
return -1;
}
}
BusyBox»DHCP-клиент поддерживает эту возможность, и его источником является широко доступным, так что я не понимаю ваш вопрос? – fvu
Мне нужно создать клиентское приложение, которое выполняет вышеупомянутые действия (например, запрос и установка IP-адреса). Я установил параметр DHCP_REQUESTED_IP в коде dhcp, который вы цитируете, но безрезультатно. – user3171859
Сервер не обязан предлагать запрошенный адрес, проверьте [rfc 2131] (http://www.ietf.org/rfc/rfc2131.txt): 'Клиент передает сообщение DHCPDISCOVER в свою локальную физическую подсеть. Сообщение DHCPDISCOVER МОЖЕТ включать параметры, предлагающие значения для сетевого адреса и продолжительности аренды. '. Заметьте, rfc говорит * suggest * – fvu