vc 服务器端口映射,vc端口映射源代码.doc

vc端口映射源代码.doc

端口映射源代码

/*

端口映射

PortTransfer_三种模式。

(1) PortTransfer Port Dest_IP Port

在运行本程序的计算机上监听Port端口,并将所有连接请求转到Dest_IP的Port去

(2) PortTransfer ctrlIP ctrlPort Dest_IP Port

和模式3配合用,程序将先主动连接ctrlIP:ctrlPort,之后所有在模式3的ServerPort端口的请求转到Dest_IP:Port去

(3) PortTransfer ctrlPort ServerPort

在执行模式2前先执行,将监听ctrlPort和ServerPort 端口,ctrlPort供模式2使用,ServerPort提供服务.

模式1适合在网关上运行,将内网IP的端口映射到网关上,

如:PortTransfer 88 10 80

那么网关将开启88端口,所有在88端口的请求将转到内网的10的80端口

模式2和模式3联合使用可以将内网的IP和端口映射到指定的IP和端口上,

一般在公网IP(假设)上执行模式3,如:PortTransfer 99 80, 80是映射过来的端口

内网用户执行模式2如:PortTransfer 99 80,

那么程序在内网将先连接:99建立个连接,并等待接收命令。

之后当的80端口有请求,将通过99端口命令内网机子和公网机子建立条新的数据连接,

并将请求通过新建的连接将请求转发到内网机.

Code By LZX.

2006.08.31

*/

/*

Author: LZX

E-mail: LZX@

Version: V1.1

Purpose: Mapping Port, Not support for UDP

Test PlatForm: WinXP SP2

Compiled On: VC++ 6.0

Last Modified: 2006.08.31

*/

#include

#include

#include

#pragma comment(lib, "ws2_32.lib")

#define SERVERNAME "ZXPortMap"

#define VERSION "v1.0"

#define MAXBUFSIZE 8192

#define ADDRSIZE 32

struct SOCKINFO

{

SOCKET ClientSock;

SOCKET ServerSock;

};

struct ADDRESS

{

char szIP[ADDRSIZE];

WORD wPort;

SOCKET s;

};

A simple class of stack operator. code start.....

template

class STACK

{

#define MAXSTACK 1024*2

private:

int top;

T Data[MAXSTACK];

public:

STACK()

{

top = -1;

}

bool IsEmpty()

{

return top < 0;

}

bool IsFull()

{

return top >= MAXSTACK;

}

bool Push(T data)

{

if(IsFull())

return false;

top++;

Data[top] = data;

return true;

}

T Pop()

{

return Data[top--];

}

};/stack end

//Transfer some Parameters

template

class TransferParam

{

public:

X GlobalData;

STACK LocalData;

public:

TransferParam();

virtual ~TransferParam();

bool Push(Y data);

Y Pop();

};

template

TransferParam::TransferParam()

{

memset(this, 0, sizeof(TransferParam));

}

template

TransferParam::~Transfe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值