精华内容
下载资源
问答
  • Linux下C语言获取本机IP地址
    2021-05-13 01:22:09

    #include char* GetLocalIp()

    {

    int MAXINTERFACES=16;

    char *ip = NULL;

    int fd, intrface, retn = 0;

    struct ifreq buf[MAXINTERFACES];

    struct ifconf ifc;

    if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0)

    {

    ifc.ifc_len = sizeof(buf);

    ifc.ifc_buf = (caddr_t)buf;

    if (!ioctl(fd, SIOCGIFCONF, (char *)&ifc))

    {

    intrface = ifc.ifc_len / sizeof(struct ifreq);

    while (intrface-- > 0)

    {

    if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface])))

    {

    ip=(inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));

    break;

    }

    }

    }

    close (fd);

    return ip;

    }

    }

    更多相关内容
  • linux C语言TCP/IP协议连接通讯,在客户机程序里将IP地址改为自己的IP地址即可
  • #include #include #include #include #include #include #include #includeint SetIfAddr(char *ifname, char *Ipaddr, char *mask,char *gateway){int fd;int rc;struct ifreq ifr;struct sockaddr_in *sin;struct...

    #include #include #include #include #include #include #include #include

    int SetIfAddr(char *ifname, char *Ipaddr, char *mask,char *gateway)

    {

    int fd;

    int rc;

    struct ifreq ifr;

    struct sockaddr_in *sin;

    struct rtentry  rt;

    fd = socket(AF_INET, SOCK_DGRAM, 0);

    if(fd < 0)

    {

    perror("socket   error");

    return -1;

    }

    memset(&ifr,0,sizeof(ifr));

    strcpy(ifr.ifr_name,ifname);

    sin = (struct sockaddr_in*)&ifr.ifr_addr;

    sin->sin_family = AF_INET;

    //ipaddr

    if(inet_aton(Ipaddr,&(sin->sin_addr)) < 0)

    {

    perror("inet_aton   error");

    return -2;

    }

    if(ioctl(fd,SIOCSIFADDR,&ifr) < 0)

    {

    perror("ioctl   SIOCSIFADDR   error");

    return -3;

    }

    //netmask

    if(inet_aton(mask,&(sin->sin_addr)) < 0)

    {

    perror("inet_pton   error");

    return -4;

    }

    if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)

    {

    perror("ioctl");

    return -5;

    }

    //gateway

    memset(&rt, 0, sizeof(struct rtentry));

    memset(sin, 0, sizeof(struct sockaddr_in));

    sin->sin_family = AF_INET;

    sin->sin_port = 0;

    if(inet_aton(gateway, &sin->sin_addr)<0)

    {

    printf ( "inet_aton error\n" );

    }

    memcpy ( &rt.rt_gateway, sin, sizeof(struct sockaddr_in));

    ((struct sockaddr_in *)&rt.rt_dst)->sin_family=AF_INET;

    ((struct sockaddr_in *)&rt.rt_genmask)->sin_family=AF_INET;

    rt.rt_flags = RTF_GATEWAY;

    if (ioctl(fd, SIOCADDRT, &rt)<0)

    {

    zError( "ioctl(SIOCADDRT) error in set_default_route\n");

    close(fd);

    return -1;

    }

    close(fd);

    return rc;

    }

    展开全文
  • linux用指令来设置IP,MASK,GATEWAY://终端指令实现//ifconfig eth0 192.168.0.0 netmask 255.255.0.0//route add default gw 10.240.0.0//C代码实现char IP[24] = "192.168.1.0";char Mask[24] = "255.255.0.0“;...

    linux用指令来设置IP,MASK,GATEWAY:

    //终端指令实现

    //ifconfig eth0 192.168.0.0 netmask 255.255.0.0

    //route add default gw 10.240.0.0

    //C代码实现

    char IP[24] = "192.168.1.0";

    char Mask[24] = "255.255.0.0“;

    char gateway[24] = "10.240.0.0";

    char cmd_IP_Mask[64] = {0};

    char cmd_GW[64] = {0};

    sprintf(cmd_IP_Mask, "ifconfig eth0 %s netmask %s", IP, Mask);

    sprintf(cmd_GW, "route add default gw %s netmask %s", gateway);

    unsigned int IP_Address = inet_addr(IP),将点间隔的IP地址转换成长整形的数据

    将长整形的IP地址以点阵形式输出:

    printf("GetHostIp:IP...%s\n",inet_ntoa( IP_Address ));

    //如果应用传入的是长整形的ip ,mask ,gw,用以下C代码来实现转换---可以直接拿来用的,已经测试通过

    #define SIN_ADDR(x) (((struct sockaddr_in *) (&(x)))->sin_addr.s_addr)

    #define SET_SA_FAMILY(addr, family) \

    memset((char*)&(addr), '\0',   sizeof(addr)); \

    addr.sa_family = (family)

    char ipaddr[20];

    char netmask[20];

    char gateway[20];

    sprintf(ipaddr, "%d.%d.%d.%d", (ip&0xff000000)>>24,

    (ip&0xff0000)>>16, (ip&0xff00)>>8, (ip&0xff));

    sprintf(netmask, "%d.%d.%d.%d", (mask&0xff000000)>>24,

    (mask&0xff0000)>>16, (mask&0xff00)>>8,

    (mask&0xff));

    sprintf(gateway, "%d.%d.%d.%d", (gw&0xff000000)>>24,

    (gw&0xff0000)>>16, (gw&0xff00)>>8,

    (gw&0xff));

    static int set_ipaddr(char *ipaddr){

    int s;

    if((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)

    {

    return FAIL;

    }

    struct ifreq ifr;

    bzero((char *)&ifr, sizeof(ifr));

    strcpy(ifr.ifr_name,"eth0");

    struct sockaddr_in addr;

    bzero(&addr, sizeof(struct sockaddr_in));

    addr.sin_family = AF_INET;

    inet_aton(ipaddr,&addr.sin_addr);//将输入字符转成网络地址

    memcpy((char*)&ifr.ifr_ifru.ifru_addr, (char*)&addr, sizeof(struct sockaddr_in));

    if(ioctl(s, SIOCSIFADDR, &ifr) < 0)

    {

    close(s);

    return FAIL;

    }

    close(s);

    return OK;

    }

    static int set_netmask(char *netmask){

    int s;

    if((s = socket(AF_INET,SOCK_DGRAM, 0)) < 0)

    {

    KK_ERROR("[set_netmask]create socket failed:line:%d\n",__LINE__);

    return FAIL;

    }

    struct ifreq ifr;

    bzero((char *)&ifr, sizeof(ifr));

    strcpy(ifr.ifr_name,"eth0");

    struct sockaddr_in netmask_addr;

    bzero(&netmask_addr, sizeof(struct sockaddr_in));

    netmask_addr.sin_family = AF_INET;

    inet_aton(netmask, &netmask_addr.sin_addr);

    memcpy((char*)&ifr.ifr_ifru.ifru_netmask, (char*)&netmask_addr, sizeof(struct sockaddr_in));

    if(ioctl(s,SIOCSIFNETMASK,&ifr) < 0)

    {

    close(s);

    KK_ERROR("[set_netmask]ioctl failed:line:%d\n",__LINE__);

    return FAIL;

    }

    close(s);

    return OK;

    }

    static int set_gateway(char *gateway)

    {

    static int sock_fd = -1;

    struct rtentry rt;

    U32 dstaddr, gwaddr;

    dstaddr = inet_addr("0.0.0.0");

    gwaddr = inet_addr(gateway);

    /* Get an internet socket for doing socket ioctls. */

    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

    memset(&rt, 0, sizeof(rt));

    /*set Destination addr*/

    SET_SA_FAMILY (rt.rt_dst, AF_INET);

    SIN_ADDR(rt.rt_dst) = dstaddr;

    /*set gw addr*/

    SET_SA_FAMILY (rt.rt_gateway, AF_INET);

    SIN_ADDR(rt.rt_gateway) = gwaddr;

    /*set genmask addr*/

    SET_SA_FAMILY (rt.rt_genmask, AF_INET);

    SIN_ADDR(rt.rt_genmask) = 0L;

    rt.rt_dev = "eth0";

    rt.rt_flags = RTF_GATEWAY;

    if(ioctl(sock_fd, SIOCADDRT, &rt) < 0)

    {

    close(sock_fd);

    KK_ERROR("[set_gateway]ioctl failed:line:%d\n",__LINE__);

    return FAIL;

    }

    return OK;

    }

    展开全文
  • c语言,包含获取指定网口ip地址,mac地址,网关,以及c语言实现修改ip,网关,子网掩码,以及设置socket套接字加入到多播组的方法;可以实现linux下的time_t和字符串的相互转换。
  • C语言获取mac地址和IP地址的源代码,Linux系统下面。
  • #include <netinet/in.h> #include <netinet/tcp.h> /* TCP_NODELAY */ #include <unistd.h> /* for convenience */ #include <limits.h> #include <time.h>...#include &
    #include <netinet/in.h>
    #include <netinet/tcp.h> /* TCP_NODELAY */
    #include <unistd.h>		/* for convenience */
    #include <limits.h>
    #
    展开全文
  • #include//设置IPvoid setip(char *buffer){char * FILE_NAME = "/etc/network/interfaces";FILE * file_fd;int len = 0;file_fd = fopen(FILE_NAME,"r+");if(file_fd == NULL){perror("errno");}//跳过开头的116个...
  • Linux下通过netlink给网卡添加和删除IP地址(keeplaived和ip命令也是通过netlink来添加删除IP的)。纯C代码,gcc可直接编译,测试通过。 netlink添加IP可以让一个网卡拥有多个IP地址(可以通过ip addr命令来查看)...
  • C语言获取本机IP地址

    2016-11-30 11:53:34
    文件可直接编译运行,亲测可有效获取本机IP地址
  • c语言,包含获取指定网口ip地址,mac地址,网关,以及c语言实现修改ip,网关,子网掩码,以及设置socket套接字加入到多播组的方法;。
  • int get_gw_ip(char *eth, char *ipaddr){int sock_fd;struct sockaddr_in my_addr;struct ifreq ifr;/**//* Get socket file descriptor */if ((sock_fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1){perror("socket....
  • 今天看到需要使用c语言Linux的环境,查看本机IP地址 Linux下使用C语言查看本机IP地址 里面介绍了五种方法
  • #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int go_ping(char *svrip) { int i=0,time=0; while(1) { pid_t pid;... ...
  • 适用于linux环境的C语言程序,获取网卡MAC地址,附详细操作说明,两种方式写成的程序,都能达到所需功能,测试可用。
  • Linux下编写程序经常遇到需要对网卡进行管理,但是在glic库中或者其他函数库中却发现没有境界能用的API。有的人在程序中通过system()执行...去获取ip地址等信息,但是只能获取,却不能配置。 还有是通过io ...
  • Linux下C语言获取和修改本机IP地址

    千次阅读 2015-02-09 10:35:16
    /** 头文件*/#ifndef _GET_IP_H #define _GET_IP_H extern char *get_ip(char *ip); extern int set_hand_ip(const char *ip); extern int check_right_ip(const char *ip); #endif //====================
  • 转载地址1 转载地址2 转载地址3  ...1,检测IP算法,接口说明也如图。 /* *brief *param: the ip address *return value: if susscess,0 is returned,or 1 is returned on error. */ int checkValidIP(const...
  • struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short int ifru_flags; int ifru_ivalue; int ifru_mtu;... struct ifconf 和struct ifreq的关系可以参考图:
  • linux C获取本地IP地址

    千次阅读 2021-12-28 19:15:53
    我现在是需要建立反弹shell,要从远程设备反弹至本地设备,所以需要获取本地ip,当前我在本地已经跟远程设备上的某个服务建立了连接,因此,可以使用上面连接中介绍的getsocketname的方法获取到本地ip,核心代码如下...
  • 子网编址技术将本地部分进一步划分为“物理网络”部分和“主机”部分,其中“物理网络”用于标识同一IP网络地址下的不同物理网络,即是“子网”。 A类IP段 0.0.0.0 到127.255.255.255 B类IP段 128.0.0.0 到191.255...
  • 前言 感觉这个非常适合嵌入式设备,能怎么发挥就看大家了,本次使用函数popen;函数原型 #include <stdio.h> FILE *popen(const char *command, const char *type); 参数 const char *command shell命令 ...
  • linux环境我们敲ifconfig可以显示或设置我们的网络设备。设备可能有eth0、eth1、 docker0、em1、lo等。下面代码可以通过配置不同的参数获取不同设备的ip值: #include #include #include void getStbIP(char *...
  • 如果为管理员,则进入管理员目录,如果为普通员工,则进入员工目录。...在员工目录,可以查看自己的信息,不能查看其他人的信息,可以修改自己的电话,地址等个人信息,但不能修改工资等管理员权限信息。
  • linux C语言 网络编程教程及源码 一、网络应用层编程 1、Linux网络编程01——网络协议入门 2、Linux网络编程02——无连接和面向连接的区别 3、Linux网络编程03——字节序和地址转换 4、Linux网络编程04——套接字 5...
  • 通过 route -n命令获取网络信息,再通过C语言解析,获取 代码如下: 44 int main() 45 { 46 char Cmd[100]={0}; 47 char readline[100]={0}; 48 memset( Cmd, 0, sizeof( Cmd ) ); 49 sprintf( Cmd,"route ...
  •  程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的。  移植时服务端可以不用更改,编译后可直接运行;客户端将ip改为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,281
精华内容 15,312
关键字:

linux下c语言设置ip地址