#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
//Windows和LINUX系統所提供的Socket API不一樣,需要分別聲明
#ifdef _WIN32
#include <winsock2.h>
#include <wininet.h>
#else
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#endif
//定義一段緩衝區
#defineBUFSZ65535
char buf[ BUFSZ ];
int main(int argc, char** argv)
{
//這是Server的資料,包括IP地址以及用作TCP和UDP連接的端口號
short tcp_proxy_port=8888, udp_proxy_port=8811;
char udp_proxy_ip[]="127.0.0.1";
short clt_udp_port;
//在Windows系統下,使用網絡前要先用WSAStartup()來進行初始化,
//WSA是Windows Socket API的意思,本文使用WinSock 2.0版本
//在VC中可以用WINSOCK_VERSION來指定版本,不過GCC FOR WIN32沒有定義這個宏
//我們需要自己指定
#ifdef _WIN32
WSADATA WSAData;
if( WSAStartup(0x0110, &WSAData) ) {
//if( WSAStartup(WINSOCK_VERSION, &WSAData) ) {
p_error("WSA error");
exit(-1);
}
#endif
//啟動一個TCP SOCKET,用來和QQ進行握手,並記錄QQ用來和我們溝通的UDP端口號(clt_udp_port)
Launch_TCP( tcp_proxy_port, udp_proxy_ip, udp_proxy_port, &clt_udp_port );
//握手成功後,啟動一個UDP SOCKET,用作數據傳輸,是真正起PROXY作用的部份
Launch_UDP( udp_proxy_port, udp_proxy_ip, clt_udp_port );
return 0;
}
void p_error( const char *err_msg )
{
printf( "ERR=>%s\n", err_msg );
}
void debug_showbin( const char *dbuf, int n, const char *name, const char *end )
{
int i;
printf( "%s ==> %d bytes: ", name, n );
for( i=0; i<n; i++ )
printf( "(0x%x)", (unsigned char)dbuf[i] );
printf( "%s", end );
}
void debug_showip( const struct sockaddr_in *dbuf, const char *name, const char *end )
{
printf("[ %s ==> %s:%u ]%s", name, inet_ntoa(dbuf->sin_addr), ntohs(dbuf->sin_port), end
);
}
联系客服