-
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协议连接通讯
2018-06-28 16:02:51linux C语言TCP/IP协议连接通讯,在客户机程序里将IP地址改为自己的IP地址即可 -
linux下C语言实现静态IP地址,网关的设置
2021-05-14 01:31:36#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 下用指令和C语言来设置IP,MASK,gateway
2021-05-14 03:28:15linux用指令来设置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、网关、子网掩码 时间字符串相互转换
2021-07-30 09:18:24c语言,包含获取指定网口ip地址,mac地址,网关,以及c语言实现修改ip,网关,子网掩码,以及设置socket套接字加入到多播组的方法;可以实现linux下的time_t和字符串的相互转换。 -
C语言去获取Linux系统的IP地址和MAC地址的方法
2015-06-12 15:44:59C语言获取mac地址和IP地址的源代码,Linux系统下面。 -
linux C语言设置网络ip和子网掩码
2021-09-09 17:20:17#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> #
-
Linux下c语言通过修改/etc/network/interfaces修改IP
2021-05-14 16:44:03#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的)
2020-01-08 10:57:00Linux下通过netlink给网卡添加和删除IP地址(keeplaived和ip命令也是通过netlink来添加删除IP的)。纯C代码,gcc可直接编译,测试通过。 netlink添加IP可以让一个网卡拥有多个IP地址(可以通过ip addr命令来查看)... -
C语言获取本机IP地址
2016-11-30 11:53:34文件可直接编译运行,亲测可有效获取本机IP地址。 -
c语言实现设置ip、网关、子网掩码
2015-04-27 20:45:47c语言,包含获取指定网口ip地址,mac地址,网关,以及c语言实现修改ip,网关,子网掩码,以及设置socket套接字加入到多播组的方法;。 -
linux C语言获取网卡对应IP地址
2021-05-12 16:30:29int 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.... -
Linux下使用C语言查看本机IP地址
2020-07-08 12:07:56今天看到需要使用c语言在Linux的环境下,查看本机IP地址 Linux下使用C语言查看本机IP地址 里面介绍了五种方法 -
linux下c语言判断指定IP能否ping通的测试程序
2021-07-08 11:14:56#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地址
2013-09-11 17:58:40适用于linux环境的C语言程序,获取网卡MAC地址,附详细操作说明,两种方式写成的程序,都能达到所需功能,测试可用。 -
Linux通过c语言函数管理网络(1)-----获取/修改IP和MAC地址
2021-10-19 16:21:30在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 //==================== -
Linux下C语言检测IP地址和Mac地址是否合法
2018-08-11 21:55:03转载地址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... -
C语言获取Linux系统的IP地址和MAC地址
2021-05-14 21:19:12struct 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,核心代码如下... -
C语言实现IP地址合法性检测和子网匹配
2021-01-26 18:01:26子网编址技术将本地部分进一步划分为“物理网络”部分和“主机”部分,其中“物理网络”用于标识同一IP网络地址下的不同物理网络,即是“子网”。 A类IP段 0.0.0.0 到127.255.255.255 B类IP段 128.0.0.0 到191.255... -
在linux使用c语言调用shell命令读取指定ip地址
2022-01-07 09:53:11前言 感觉这个非常适合嵌入式设备,能怎么发挥就看大家了,本次使用函数popen;函数原型 #include <stdio.h> FILE *popen(const char *command, const char *type); 参数 const char *command shell命令 ... -
linux下C语言获取eth0的IP地址
2020-10-20 11:06:20linux环境下我们敲ifconfig可以显示或设置我们的网络设备。设备可能有eth0、eth1、 docker0、em1、lo等。下面代码可以通过配置不同的参数获取不同设备的ip值: #include #include #include void getStbIP(char *... -
基于Linux下C语言开发的员工管理系统
2018-03-10 14:44:04如果为管理员,则进入管理员目录,如果为普通员工,则进入员工目录。...在员工目录,可以查看自己的信息,不能查看其他人的信息,可以修改自己的电话,地址等个人信息,但不能修改工资等管理员权限信息。 -
linux C语言 网络编程教程及源码
2017-05-12 13:06:09linux C语言 网络编程教程及源码 一、网络应用层编程 1、Linux网络编程01——网络协议入门 2、Linux网络编程02——无连接和面向连接的区别 3、Linux网络编程03——字节序和地址转换 4、Linux网络编程04——套接字 5... -
linux使用c语言获取网关地址
2021-12-21 20:19:02通过 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 ... -
Linux下C语言socket网络编程简例
2021-01-09 16:42:35程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的。 移植时服务端可以不用更改,编译后可直接运行;客户端将ip改为...