0
私はセットアップにコードがここHow to set the IP address from C in linuxから変更されたIPアドレスは成功するか
int
set_ip(const char *name, const char *ip)
{
struct ifreq ifr;
struct sockaddr_in *addr;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
strncpy(ifr.ifr_name, name, IFNAMSIZ);
ifr.ifr_addr.sa_family = AF_INET;
addr = (struct sockaddr_in*)&ifr.ifr_addr;
/* inet_pton() returns 1 on success */
/* network address was successfully converted */
int s;
s = inet_pton(AF_INET, ip, &addr->sin_addr);
if (s <= 0) {
if (s == 0)
fprintf(stderr, "Set IP %s not in presentation format\n", ip);
else
perror ("inet_pton");
exit (EXIT_FAILURE);
}
ioctl(fd, SIOCSIFADDR, &ifr);
ioctl(fd, SIOCGIFFLAGS, &ifr);
strncpy(ifr.ifr_name, name, IFNAMSIZ);
ifr.ifr_flags |= (IFF_UP | IFF_RUNNING);
ioctl(fd, SIOCSIFFLAGS, &ifr);
return 0;
}
をこのコードを使用できません。
私の質問は
がどのように成功したかどうか、IPアドレスの変更を知っているのですか? ioctlの戻り値は常に0です。
$ uname -a
Linux DMA1 4.4.0-38-generiC#57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
私は何時間もグーグルで試しましたが、解決策は見つかりませんでした。だから私はここに私の質問を投稿して、専門家に尋ねる。事前に感謝
を取得します。 –
@NominalAnimal IPアドレスを192.168.1.abc、ioctlに0を返すように設定することもできます。 –
@NominalAnimalまず、inet_ptonの名前を確認する必要があります。 –