⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm.c

📁 改进的str_catstr_cmpstr_to_i 本机IP地址和MAC地址
💻 C
字号:
#include<stdio.h>
#include<time.h>
#include<sys/ioctl.h>
#include<net/if.h>
#include<netinet/in.h>
#include <netinet/if_ether.h>

char *str_cat(char *str1, char *str2)
{
	int len;	
	len = strlen(str1)+strlen(str2)+1;
 	char *buff = (char *)malloc(len);
	memset(buff, 0, len);
	strcpy(buff, str1);
	strcat(buff, str2);
	return buff;
}

int str_to_i(char *ch)
{
	int i,k;
	i=0;
	for(k=strlen(ch);k>0;k--){
                i=i*10+*(ch++)-48;
        }
	return i;
}

int str_cmp(char * ch1,char * ch2)
{
        char * t1,* t2;
	char c1,c2;
        t1 = ch1;
        t2 = ch2;
        while(isprint(*t1)&&isprint(*t2)){
		c1 = *t1++;
		c2 = *t2++;
		if(c1 > c2) return 1;
		if(c1 < c2) return -1;
        }
        while(isspace(*t1))     t1++;
        while(isspace(*t2))     t2++;
        if(isprint(*t1))        return 1;
        if(isprint(*t2))        return -1;
        return 0;
 
}

int get_self_time(time_t *the_time)
{
	time(the_time);
	return 0;
}

int get_selfip_addr(char *myaddr)
{
        char buf[4096];
        struct ifconf ifc;
        struct ifreq *ifr;
        int i,cnt;
        ifc.ifc_len = 4096;
        ifc.ifc_buf = buf;
        i = socket(AF_INET,SOCK_DGRAM,0);
        ioctl(i,SIOCGIFCONF,&ifc);
        close(i);
        ifr = ifc.ifc_req;
        cnt = ifc.ifc_len/sizeof(*ifr);
        for(i = 0;i < cnt;i++)
        {
                struct sockaddr_in *addr = (struct sockaddr_in *)&ifr[i].ifr_addr;
                if(strcmp(ifr[i].ifr_name,"eth0")==0)
                {
                        sprintf(myaddr,"%s",inet_ntoa(addr->sin_addr));
                }
        }
        return 0;
}

int mac_self(unsigned char addr[])
{
	char* device="eth0";
	unsigned char macaddr[ETH_ALEN];
	unsigned char ut1[100],ut2[100];                                                                                           
	int s=socket(AF_INET,SOCK_DGRAM,0);
	struct ifreq req;
	int err;
	strcpy(req.ifr_name,device);
	err=ioctl(s,SIOCGIFHWADDR,&req);
	close(s);
	int i=0;
	if(err!=-1)
	{
		memcpy(macaddr,req.ifr_hwaddr.sa_data,ETH_ALEN);
		for(i=0;i<ETH_ALEN;i++)
		{
			sprintf(ut1,"%2x:",macaddr[i]);
			sprintf(ut2,"%s%s",addr,ut1);
			sprintf(addr,"%s",ut2);
		}
		addr[strlen(addr)-1]='\0';
	}
	else
	{
		printf("error\n");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -