首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从C程序中设置IP地址

尝试从C程序中设置IP地址
EN

Stack Overflow用户
提问于 2021-07-26 13:26:46
回答 1查看 178关注 0票数 1

我试图用C代码更改raspberry pi的IP地址。但是当我运行代码时,我可以用我给出的新IP连接到raspberry pi。但是,如果我重新启动raspberry pi或网络服务,它就会回到原来的IP。

代码语言:javascript
复制
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <string.h>

int main(int argc, const char *argv[]) 
{
    struct ifreq ifr;
    const char * name = "eth0";
    int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);

    strncpy(ifr.ifr_name, name, IFNAMSIZ);

    ifr.ifr_addr.sa_family = AF_INET;

    struct sockaddr_in* addr = (struct sockaddr_in*)&ifr.ifr_addr;
    inet_pton(AF_INET, "192.168.4.27", &addr->sin_addr);
    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;
}

通常覆盆子的地址是192.168.4.28,我想用192.168.4.27代替它。当我运行它时,我不会收到任何错误,我可以连接到192.168.4.27。此外,我可以连接192.168.4.28。所以可以连接两个IP。当我键入"ifconfig“时,我可以看到ip已更改为192.168.4.27。当我输入"ip地址“时,我得到了这个;

eth0: inet 192.168.4.27/24范围全球非固定路由eth0 inet 192.168.4.28/24范围全球次级非固定路线eth0

简言之,我怎样才能确保我想给予的知识产权是主要的和永久的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-27 07:51:58

如您在示例中所做的那样,修复IP地址只会更改适配器的“当前”IP。

当Raspberry启动时,它会从init脚本中设置IP地址,这就是您需要修改的内容,以便使更改永久化。

它使用的脚本类型取决于您正在使用的发行版,可能是systemd。您可以制作一个程序来使用系统工具来设置该信息,或者修改文本文件。

对于systemd脚本/文件,它们通常位于/etc/systemd/ 系统手册页d,下面是一个

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68530738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档