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

📄 network.cpp

📁 从国外网站上下载的关于 逆向工程和协议分析练习 的一个分析文档 对你的加密与解密很有帮助
💻 CPP
字号:
/*
 *	网络模块
 */

#include "stdafx.h"
#include <WINSOCK2.H>
#include "options.h"

static SOCKET m_socket = -1;

int network_init(void)
{
	WSADATA wsaData;
	int iResult;
	sockaddr_in service;

	iResult = WSAStartup(MAKEWORD(2,2),&wsaData);
	if (iResult != NO_ERROR)
	{
		printf("WSAStartup failed: %d\n",iResult);
		return -1;
	}
	
	m_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
	if (m_socket == INVALID_SOCKET)
	{
		printf("socket failed: %ld\n",WSAGetLastError());
		WSACleanup();
		return -2;
	}
	
	if (g_options.my_port)
	{
		service.sin_family = AF_INET;
		service.sin_port = htons(g_options.my_port);
		if (g_options.my_ip)
			service.sin_addr.s_addr = inet_addr(g_options.my_ip);
		else
			service.sin_addr.s_addr = INADDR_ANY;
		
		if (bind(m_socket,(SOCKADDR*)&service,sizeof(service)) == SOCKET_ERROR)
		{
			printf("bind failed: %ld\n",WSAGetLastError());
			closesocket(m_socket);
			WSACleanup();
			return -3;
		}
	}
	
	return 0;
}


int network_exit(void)
{
	closesocket(m_socket);
	WSACleanup();
	return 0;
}


int network_send(unsigned char *data,int len)
{
	int n;
	sockaddr_in dest;

	dest.sin_family = AF_INET;
	dest.sin_port = htons(g_options.server_port);
	dest.sin_addr.s_addr = inet_addr(g_options.server_ip);

	n = sendto(m_socket,(const char*)data,len,0,(SOCKADDR*)&dest,sizeof(dest));
	
	if ( n == SOCKET_ERROR)
	{
		printf("sendto failed: %ld\n",WSAGetLastError());
		return -3;
	}

	return n;
}


int network_recv(unsigned char *data,int len)
{
	fd_set r;
	int n;
	struct timeval tv;
	sockaddr_in sender;
	int slen = sizeof(sender);
	
	FD_ZERO(&r);
	FD_SET(m_socket,&r);

	tv.tv_sec = g_options.recv_timeout;
	tv.tv_usec = 0;
	
	n = select(m_socket+1,&r,NULL,NULL,&tv);

	if (n == 0)
	{
		printf("network_recv: timeout\n");
		return -1;
	}

	if (n < 0)
	{
		printf("network_recv: select error\n");
		return -2;
	}

	n = recvfrom(m_socket,(char*)data,len,0,(SOCKADDR*)&sender,&slen);
	
	if ( n == SOCKET_ERROR)
	{
		printf("recvfrom failed: %ld\n",WSAGetLastError());
		return -3;
	}

	return n;
}

⌨️ 快捷键说明

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