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

📄 main.cpp

📁 这个程序能够通过ip来查询实际地址利用的是ip138的数据库
💻 CPP
字号:
/*   
 *
 * e-mail: enstart@gmail.com
 * qq: 597807536
 * CopyRight (c) 2009 NiChunRong
 *
 */

#pragma comment(lib, "WS2_32.lib")
#include <winsock2.h>

#include <stdio.h>
#include "buffer.h"

#define DEFAULT_PORT 80
#define DEFAULT_SERVER "219.153.15.76"

extern void send_msg(char *ip, SOCKET s);

inline int get_next(char *src, char **p, char *search)
{
	char *t;
	(*p) = strstr(src, search);
	if((*p) == NULL)
		return -1;
	(*p) += 12;
	t = strchr((*p), '<');
	if(t == NULL)
		return -1;
	*t = '\0';
	printf("%s%s\n", search, (*p));

	(*p) = t + 1;

	return 0;
}
/*
 * this function is written by LiuJiaLin
 */
inline int test_ip(char *ip)
{
	int count = 0, number = 0;
	int position = 0, flag = 0;
	int num = 0;
	while((*ip) != '\0')
	{		
		if((*ip) <= '9' && (*ip) >= '0')	
		{
			if(++num > 3)
				return -1;
			if(flag == 0)
			{
				position++;
				flag++;
			}
			number = number * 10 + (*ip) - '0';
			ip++;
		}
		else
		{
			if((*ip) == '.' && count <= 2 && number <= 255 
				&& position == count + 1)	
			{
				number = 0;
				flag = 0;
				count++;
				ip++;
				num = 0;
			}
			else
				return -1;
		}
	}
	if(count != 3 || position != 4)
		return -1;
	else 
		return 0;
}

int main(int argc, char *argv[])
{
	char *ip, *p;
	char html[8];
	char ip_buf[18];
	int len = 0;
	char buf[4096];
	buffer *recv_buf;
	SOCKET sock;
	WSADATA wsaData;
	struct sockaddr_in sa;
	if(argc == 1)
	{
		printf("input ip adress: ");
		scanf_s("%s", ip_buf, 18);
		ip = ip_buf;
	}
	else if(argc > 2)
	{
		printf("Usage:>  ip\n");
		return -1;
	}
	else
		ip = argv[1];

	if(test_ip(ip) < 0)
	{
		printf("ip adress format error!");
		return -1;
	}

	if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)    
		return -1;
	 
	if(LOBYTE(wsaData.wVersion ) != 2 ||
        HIBYTE(wsaData.wVersion ) != 2 ) 
	{
		WSACleanup();
		return -1; 
	}
	
	sock = socket(AF_INET, SOCK_STREAM, 0);
	if(sock == INVALID_SOCKET)
		return -1;

	sa.sin_family = AF_INET;
	sa.sin_addr.S_un.S_addr = inet_addr(DEFAULT_SERVER);
	sa.sin_port = htons(DEFAULT_PORT);
    
	if(connect(sock, (struct sockaddr *)&sa, sizeof(sa)) < 0)
		return -1;

	send_msg(ip, sock);

	recv_buf = buffer_init();

	recv(sock, buf, 4096, 0);//this is not good if the website changes

	while((len = recv(sock, buf, 4096, 0)) > 0)
	{
		buffer_copysl(recv_buf, buf, len);
		//this is not good if the website changes
		if(recv_buf->length < 7)
			continue;
		p = recv_buf->ptr + recv_buf->length - 7;
		if((*p) == '<')
		{
			memcpy(html, p, 7);
			html[7] = '\0';
			if(strcmp(html, "</html>") == 0)
				break;
		}
		/*****************************************************/
	}

	buffer_copyend(recv_buf);
	
	p = recv_buf->ptr;
	if(get_next(p, &p, "本站主数据:") < 0)
	{
		printf("无本站主数据\n");
		return -1;
	}
	if(get_next(p, &p, "参考数据一:") < 0)
	{
		printf("无参考数据一\n");
		return -1;
	}
	if(get_next(p, &p, "参考数据二:") < 0)
	{
		printf("无参考数据二\n");
		return -1;
	}
	
	buffer_free(recv_buf);
	closesocket(sock);
	WSACleanup();
	return 0;
}

⌨️ 快捷键说明

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