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

📄 displayip.c

📁 我搜集到的一个java常用类库的源代码
💻 C
字号:
#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include "bbs.h"#include "displayip.h"#include "ipnums.h"static unsigned int free_addr[2000], free_mask[2000], free_num = 0;struct ip_s {	unsigned int left;	unsigned int right;	char ds[40];};struct ip_s *ipa;intdisplay_ip(char *ip){	struct hostent *he;	struct in_addr i;	int addr;	struct mmapfile mf = {ptr:NULL};	if ((he = gethostbyname(ip)) != 0) {		addr = *(int *) he->h_addr;	} else {		addr = inet_addr(ip);	}	i.s_addr = addr;	if (addr == -1) {		printf("\n错误的地址\n");		return -1;	}	/*	if (is_free(addr)) {		printf		    ("\n\n根据CERNET 2002年4月免费IP列表\n%s(%s)是一个免费ip.\n\n",		     ip, inet_ntoa(i));	} else {		printf		    ("\n\n根据CERNET 2002年4月免费IP列表\n%s(%s)不是免费ip.\n\n",		     ip, inet_ntoa(i));	}*/	if (mmapfile(MY_BBS_HOME "/etc/ip_arrange_sort.txt", &mf) < 0) {		printf("\n内部错误\n");		return -1;	}	ipa =( struct ip_s *) mf.ptr;	search_ip(addr);	return 0;}intsearch_ip(unsigned int addr){	unsigned int i1 = addr / (256 * 256 * 256), i2 = (addr / 65536) % 256;	unsigned int i3 = (addr / 256) % 256, i4 = (addr % 256);	unsigned int v =	    i4 * 65536 * 256 + i3 * 256 * 256 + i2 * 256 + i1;	int low = 0, high = NUM_IP - 1, mid;	printf("IP地址 [%d.%d.%d.%d]\n", i4, i3, i2, i1);	while (low < high) {		mid = (low + high) / 2;		if (ipa[mid].left <= v && v <= ipa[mid + 1].left) {			if (v <= ipa[mid].right) 				printf("该IP属于: %s\n", ipa[mid].ds);			else				printf("ft,我不认识这个IP\n");			return 0;		}		if (v < ipa[mid].left) 			high = mid;		else			low = mid;	}	printf("ft,我不认识这个IP\n");	return 0;}intget_free_list(){	FILE *fp;	char buf1[100], buf2[100], buf3[100], buf[100];	static int inited = 0, r;	if (inited)		return;	inited = 1;	fp = fopen(MY_BBS_HOME "/etc/free.txt", "r");	if (fp == 0)		return;	while (1) {		if (!fgets(buf, sizeof (buf), fp))			break;		r = sscanf(buf, "%s%s%s", buf1, buf2, buf3);		if (r <= 0)			break;		if (r != 3)			continue;		free_addr[free_num] = inet_addr(buf1);		free_mask[free_num] = inet_addr(buf2);		free_num++;		if (free_num >= 2000)			break;	}	fclose(fp);}intis_free(unsigned int x){	int n;	get_free_list();	for (n = 0; n < free_num; n++)		if (((x ^ free_addr[n]) | free_mask[n]) == free_mask[n])			return 1;	return 0;}

⌨️ 快捷键说明

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