• 大小: 19KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: C/C++
  • 标签: 端口映射  

资源简介

c++实现的高效率端口映射程序,对于学习winsock编程很有帮助,用vc6.0构建的工程,直接导入即可

资源截图

代码片段和文件信息


/*
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 192.168.0.110 80
那么网关将开启88端口,所有在88端口的请求将转到内网的192.168.0.110的80端口
模式2和模式3联合使用可以将内网的IP和端口映射到指定的IP和端口上,
一般在公网IP(假设61.1.1.1)上执行模式3,如:PortTransfer 99 80 80是映射过来的端口
内网用户执行模式2如:PortTransfer 61.1.1.1 99 127.0.0.1 80,
那么程序在内网将先连接61.1.1.1:99建立个连接,并等待接收命令。
之后当61.1.1.1的80端口有请求,将通过99端口命令内网机子和公网机子建立条新的数据连接,
并将请求通过新建的连接将请求转发到内网机.
*/

#include “stdafx.h“

#include 

#include “stack.h“
//#include “stack.cpp“ //模板类编译时未实例化
#include “transferparam.h“
//#include “transferparam.cpp“

#include “portmapping.h“

#pragma comment(lib “ws2_32.lib“)



//int nTimes = 0;
int DataSend(SOCKET s char *DataBuf int DataLen)//将DataBuf中的DataLen个字节发到s去
{
int nBytesLeft = DataLen;
int nBytesSent = 0;
int ret;
//set socket to blocking mode
int iMode = 0;
ioctlsocket(s FIONBIO (u_long FAR*) &iMode);
while(nBytesLeft > 0)
{
ret = send(s DataBuf + nBytesSent nBytesLeft 0);
if(ret <= 0)
break;
nBytesSent += ret;
nBytesLeft -= ret;
}
return nBytesSent;
}

DWORD WINAPI TransmitData(LPVOID lParam)//在两个SOCKET中进行数据转发
{
SOCKINFO socks = *((SOCKINFO*)lParam);
SOCKET ClientSock = socks.ClientSock;
SOCKET ServerSock = socks.ServerSock;
char RecvBuf[MAXBUFSIZE] = {0};
fd_set Fd_Read;
int ret nRecv;
while(1)
{
FD_ZERO(&Fd_Read);
FD_SET(ClientSock &Fd_Read);
FD_SET(ServerSock &Fd_Read);
ret = select(0 &Fd_Read NULL NULL NULL);
if(ret <= 0)
goto error;
if(FD_ISSET(ClientSock &Fd_Read))
{
nRecv = recv(ClientSock RecvBuf sizeof(RecvBuf) 0);
if(nRecv <= 0)
goto error;
ret = DataSend(ServerSock RecvBuf nRecv);
if(ret == 0 || ret != nRecv)
goto error;
}
if(FD_ISSET(ServerSock &Fd_Read))
{
nRecv = recv(ServerSock RecvBuf sizeof(RecvBuf) 0);
if(nRecv <= 0)
goto error;
ret = DataSend(ClientSock RecvBuf nRecv);


if(ret == 0 || ret != nRecv)
goto error;
}
}
error:
closesocket(ClientSock);
closesocket(ServerSock);
return 0;
}

SOCKET ConnectHost(DWORD dwIP WORD wPort)//连接指定IP和端口
{
SOCKET sockid;
if ((sockid = socket(AF_INETSOCK_STREAM0)) == INVALID_SOCKET)
{
DumpSocketError(WSAGetLastError());
return 0;
}
struct sockaddr_in srv_addr;
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.S_un.S_addr = dwIP;
srv_addr.sin_port = htons(wPort);
if (connect(sockid(struct sockaddr*)&srv_addrsizeof(struct sockaddr_in)) == SOCKET_ERROR)
{
DumpSocketError(WSAGetLastError());
goto error;
}
return sockid;

error:
closesocket(sockid);
return 0;
}

SOCKET ConnectHost(char *szIP W

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      19023  2012-12-13 18:20  portmapping\portmapping.cpp

     文件       4922  2012-11-30 15:15  portmapping\portmapping.dsp

     文件        545  2012-11-30 15:11  portmapping\portmapping.dsw

     文件       1034  2012-12-10 14:28  portmapping\portmapping.h

     文件      74752  2013-07-07 01:23  portmapping\portmapping.ncb

     文件      55808  2013-07-07 01:23  portmapping\portmapping.opt

     文件       1828  2013-07-06 11:37  portmapping\portmapping.plg

     文件       1238  2012-11-30 15:11  portmapping\ReadMe.txt

     文件        521  2012-12-10 00:39  portmapping\stack.cpp

     文件        295  2012-12-13 00:02  portmapping\stack.h

     文件        298  2012-11-30 15:11  portmapping\StdAfx.cpp

     文件        769  2012-11-30 15:11  portmapping\StdAfx.h

     文件        543  2012-12-10 00:38  portmapping\transferparam.cpp

     文件        343  2012-12-14 17:27  portmapping\transferparam.h

     目录          0  2013-07-26 07:25  portmapping\Debug

     目录          0  2013-07-26 07:25  portmapping\Release

     目录          0  2013-07-26 07:25  portmapping

----------- ---------  ---------- -----  ----

               161919                    17


评论

共有 条评论