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

📄 zhuanfa.txt

📁 非常好的一个端口转发程序,谢谢大家人像代码
💻 TXT
字号:
#include <stdio.h>
#include <windows.h> 

#pragma comment(lib,"ws2_32.lib")
typedef struct _MySocket {
 SOCKET sockfrom;
 SOCKET sockto;
}MySocket; 

typedef struct _SockAddr {
 SOCKET sock;
 int port;
 char ip[16];
}SockAddr; 

#define MAXBUFFER 4096
#define MAXUSERS 10
#define PORT 8000 

bool initSocket(void);
DWORD WINAPI ProxyThread(LPVOID lparam) ;
SOCKET CreateSocketServer(int listenPort);
SOCKET CreateSocketClient(char *addrConnect,int port);
void StartProxy(int localPort,int remotePort,char *remoteAddr); 
void closeSock(MySocket sock); 

//代理线程函数
DWORD WINAPI ProxyThread(LPVOID lparam) {
 //MySocket mysock=*(MySocket *)lparam;
 SockAddr mysockaddr=*(SockAddr *)lparam;
 char buf[MAXBUFFER];
 int ret,cnum;
 fd_set fdread;
 MySocket mysock;
 mysock.sockfrom=mysockaddr.sock;
 mysock.sockto=CreateSocketClient(mysockaddr.ip,mysockaddr.port);
 while (1) {
  FD_ZERO(&fdread);
  FD_SET(mysock.sockfrom,&fdread); 
  FD_SET(mysock.sockto,&fdread);
  ret=select(0,&fdread,NULL,NULL,NULL);
  if (ret<=0) {
   closeSock(mysock);
   break;
  }
  if (FD_ISSET(mysock.sockfrom,&fdread)) {
   cnum=recv( mysock.sockfrom,buf,strlen(buf),0);
   if (cnum==SOCKET_ERROR) {
    closeSock(mysock);
    break;
   }
   cnum=send(mysock.sockto,buf,cnum,0);
   if (cnum==SOCKET_ERROR) {
    closeSock(mysock);
    break; 
   }
   continue;
  }
  if (FD_ISSET(mysock.sockto,&fdread)) {
   cnum=recv(mysock.sockto,buf,strlen(buf),0);
   if (cnum==SOCKET_ERROR) {
    closeSock(mysock);
    break;
   }
   cnum=send( mysock.sockfrom,buf,cnum,0);
   if (cnum==SOCKET_ERROR) {
    closeSock(mysock);
    break;
   }
   continue;
  }
 }
 return 0;
} 


bool initSocket(void)
{
 WSADATA  wsadata;
 WORD     version;
 version = MAKEWORD(2,2);
    if(WSAStartup( version , &wsadata )!= 0) {
    return FALSE;
 }
 return TRUE;
} 


SOCKET CreateSocketServer(int listenPort) {
 SOCKET sock;
 struct sockaddr_in addrServer;
 bool optval=TRUE;
 sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 if (sock==SOCKET_ERROR) { 
  printf ("Create Socket Failed!\n");
  return -1;
 }
 addrServer.sin_family=AF_INET;
 addrServer.sin_addr.s_addr=htonl(INADDR_ANY);
 addrServer.sin_port=htons(listenPort); 

 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(char *)optval,sizeof(optval));
 if (bind(sock,(struct sockaddr *)&addrServer,sizeof(struct sockaddr))==SOCKET_ERROR) {
  printf ("Bind Socket Failed!\n"); 
  return -1;
 }
 return sock;
}
SOCKET CreateSocketClient(char *addrConnect,int port) {
 SOCKET sock;
 struct sockaddr_in addrRemote;
 sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 addrRemote.sin_family=AF_INET ;
 addrRemote.sin_port=htons(port);
 addrRemote.sin_addr.s_addr=inet_addr(addrConnect);
 if (connect(sock,(struct sockaddr *)&addrRemote,sizeof(addrRemote))==SOCKET_ERROR) {
  printf ("Connect to remote failed!\n"); 
  return -1;
 } 
 return sock;
}
void StartProxy(int localPort,int remotePort,char *remoteAddr) {
 MySocket mysock;
 SockAddr mysockaddr;
 SOCKET localSock,remoteSock,newSock;
 struct sockaddr addrClient; 
 int sizeAddrClient=sizeof(addrClient);
 HANDLE h;
 if (!initSocket())  {
  printf ("initial socket failed!\n");
  return;
 }
 localSock=CreateSocketServer(localPort);
 strcpy(mysockaddr.ip ,remoteAddr);
 mysockaddr.port=remotePort;
 listen(localSock,MAXUSERS);
 printf ("listening...\n");
 while (1) {
  newSock=accept(localSock,&addrClient,&sizeAddrClient);
  if (newSock==SOCKET_ERROR) { 
   printf ("accept failed!\n");
   break;
  }
  mysockaddr.sock=newSock;
  h=CreateThread(NULL,0,&ProxyThread,(LPVOID *)&mysockaddr,0,NULL);
  if (h==NULL) {
   printf ("Create Thread failed!\n"); 
   break;
  }
  WaitForSingleObject(h,0);
 }
}
void closeSock(MySocket sock) {
 closesocket(sock.sockfrom);
 closesocket(sock.sockto);
 ExitThread(0);
}
void help() {
 char buf[255];
 printf("Myproxy.exe remoteip remoteport [localport]\n");
 printf ("eg:MyProxy.exe 192.168.0.1 80 8080\n");
 printf ("********Write by Jokerfox****************\n"); 
 printf ("*********hijack9@gmail.com******************\n ");
} 

int main(int argc,char **argv) {
 int localport,remoteport;
 if (argc!=3&&argc!=4) {
  help();
  exit(0);
 }
 if (argc==3) {
  localport=PORT;
 }else {
  localport=atoi(argv[3]);
  if (localport==0) {
   help();
   exit(0);
  }
 }
 remoteport=atoi(argv[2]);
 if (remoteport==0) {
  help();
  exit(0);
 }
 StartProxy(localport,remoteport,argv[1]); 
 return 0;
}

⌨️ 快捷键说明

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