黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客编程 >> 文章正文
[推荐]端口映射源代码,对于公网访问内网服务有一定好处
        ★★★★★
端口映射源代码,对于公网访问内网服务有一定好处
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-10-26
 
 //表示公网计算机监听了这个端口
 nRecv = recv(CtrlSocket, (char*)&ReqPort, sizeof(ReqPort), 0);
 if(nRecv <= 0)
 goto error;
 nTimes++;
 ConfigInfo.LocalData.Push(ReqPort);//传递信息的结构
 hThread = CreateThread(NULL, 0, PortTransfer_2, (LPVOID)&ConfigInfo, NULL, &dwThreadId);
 if(hThread)
 CloseHandle(hThread);
 else
 Sleep(1000);
 }
error:
 printf("Error.\r\n");
 closesocket(CtrlSocket);
 return false;
}

DWORD WINAPI PortTransfer_3(LPVOID lParam)
{
 SOCKINFO socks;
 SOCKET ClientSocket, ServerSocket, CtrlSocket, tmpSocket;
 TransferParam<SOCKET, SOCKET> *ConfigInfo = (TransferParam<SOCKET, SOCKET>*)lParam;
 CtrlSocket = ConfigInfo->GlobalData;
 ClientSocket = ConfigInfo->LocalData.Pop();

 WORD wPort;
 tmpSocket = CreateTmpSocket(&wPort);//创建个临时端口

 if(tmpSocket <= 0 || wPort <= 0)
 {
 closesocket(ClientSocket);
 return 0;
 }
 //通知内网用户发起新的连接到刚创建的临时端口
 if(send(CtrlSocket, (char*)&wPort, sizeof(wPort), 0) == SOCKET_ERROR)
 {
 closesocket(ClientSocket);
 closesocket(CtrlSocket);
 return 0;
 }
 printf("ThreadID: %d ==> Waiting for server connection...", nTimes);
 ServerSocket = accept(tmpSocket, NULL, NULL);
 if(ServerSocket == INVALID_SOCKET)
 {
 printf("Error.\r\n");
 closesocket(ClientSocket);
 return 0;
 }
 printf("OK.\r\n");
 socks.ClientSock = ClientSocket;
 socks.ServerSock = ServerSocket;
 //进入纯数据转发状态
 return TransmitData((LPVOID)&socks);
}

BOOL PortTransfer_3(WORD wCtrlPort, WORD wServerPort)//监听的两个端口
{
 HANDLE hThread;
 DWORD dwThreadId;
 BOOL bOptVal = TRUE;
 int bOptLen = sizeof(BOOL);
 TransferParam<SOCKET, SOCKET> ConfigInfo;
 SOCKET ctrlsockid, serversockid, CtrlSocket, AcceptSocket;
 
 ctrlsockid = CreateSocket(INADDR_ANY, wCtrlPort);//创建套接字
 if(ctrlsockid <= 0)
 goto error2;
 serversockid = CreateSocket(INADDR_ANY, wServerPort);//创建套接字
 if(serversockid <= 0)
 goto error1;
 CtrlSocket = accept(ctrlsockid, NULL, NULL);//接受来自(内网用户发起)PortTransfer_2模式建立控制管道连接的请求
 if(CtrlSocket == INVALID_SOCKET)
 goto error0;
 //setsockopt( keep-alive......
 if (setsockopt(CtrlSocket, SOL_SOCKET, SO_KEEPALIVE, (char*)&bOptVal, bOptLen) == SOCKET_ERROR) {
 goto error0;
 //printf("Set SO_KEEPALIVE: ON\n");
 }
 //与内网用户建立了连接后就相当端口映射成功了
 //准备进入接收服务请求状态,并将在新起的线程中通过控制管道通知内网用户发起新的连接进行数据转发
 ConfigInfo.GlobalData = CtrlSocket;
 while(1)
 {
 printf("Accepting new Client...\r\n");
 AcceptSocket = accept(serversockid, NULL, NULL);
 if(AcceptSocket == INVALID_SOCKET)
 {
 printf("Error.\r\n");
 Sleep(1000);
 continue;
 }
 nTimes++;
 printf("OK.\r\n");
 ConfigInfo.LocalData.Push(AcceptSocket);//把接受到的套接字Push到栈结构中,传到新起线程那边可以再Pop出来
 hThread = CreateThread(NULL, 0, PortTransfer_3, (LPVOID)&ConfigInfo, NULL, &dwThreadId);
 if(hThread)
 CloseHandle(hThread);
 else
 Sleep(1000);
 }

error0:
 closesocket(CtrlSocket);
error1:
 closesocket(serversockid);
error2:
 closesocket(ctrlsockid);
 return false;
}

void Usage(char *ProName)
{
 printf (SERVERNAME" "VERSION" " "By LZX.\r\n");
 printf ("Usage:\r\n"
 " %s ctrlPort ServerPort\r\n"
 " %s Port Dest_IP Port\r\n"
 " %s ctrlIP ctrlPort Dest_IP Port\r\n", ProName, ProName, ProName);
}

int main(int argc, char **argv)
{

 if(! InitSocket())
 return 0;
 if(argc == 3)
 PortTransfer_3(atoi(argv[1]), atoi(argv[2]));
 else if(argc == 4)
 PortTransfer_1(atoi(argv[1]), argv[2], atoi(argv[3]));
 else if(argc == 5)
 PortTransfer_2(argv[1], atoi(argv[2]), argv[3], atoi(argv[4]));
 else
 Usage(argv[0]);

 WSACleanup();
 return 0;
}

上一页  [1] [2] [3] 

文章录入:cainiaowang    责任编辑:cainiaowang 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    VIP 专 区
    抽根憋闷烟的心声
    学习网页制作的理由
    加入终身会员的理由!!!
    学习黑客编程的5大理由
    学习免杀的6大理由
    学习软件破解的理由
    会员账号开通查询
    常见问题解答
    汇款向导
    学员报名咨询
    最 新 热 门
    Visual C++编程窃取QQ密码12-08
    编程实现重起网卡等设备12-07
    一个邮件群发的Delphi代码!12-06
    Delphi下Internet的编程技巧11-20
    Delphi黑客编程-如何映射虚拟盘11-15
    用DETOURS库获取NT管理员权限11-08
    一篇关于vb代码质量提高的文章10-30
    解析Asp.net木马文件操作10-04
    盗QQ源码10-01
    如何映射肉鸡磁盘(Delphi黑客编程09-24
    打造无DLL版穿墙Downloader(Delp09-22
    调用指定的Windows程序(Delphi编09-19
    相 关 文 章
  • 通杀网页加密源代码

  • HDSI3+网络僵尸的完整源代码

  • 熊猫烧香专杀工具源代码 解除被感染的e

  • 红狼下载者v1.0源代码

  • 无Dll插入进程,下载者VC源代码

  • 内网ADSL 端口映射准备工作!新手必看!

  • 一种查看asp源代码的思路

  • MS-06070源代码

  • 支持中文的键盘记录源代码

  • 破解所谓的网页源代码加密

  • QQ互动状态使用教程:状态源代码详解

  • 巧用端口映射 不通过网关开放任意内网

  • Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886