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

📄 bounce.c

📁 source code for port redirector
💻 C
字号:
/* 
31.12.2002
This is a proxy, port redirector, bouncer etc. for windows winsock.
it works like this 

client---------->(saddr192.168.0.113,sport12345)This_Proxy------->(daddr192.168.0.99,dport21)Remote_Host

type   bounce 192.168.0.113	        192.168.0.99      12345     21

This code is written  by Delikon, visit my site www.delikon.de , or write me a mail ich@delikon.de

This is only a test, and my fist work with winsock, if you have any improvments, questions etc. please 
mail me 

This code is compiled with vc++6.0 ,and tested with win2k.

  
	
 you MUST link it with wsock32.lib.



*/




#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>


int startWinsock(void);

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


if (argc<5)
{
printf("%s sourceaddr destinationaddr sourceport destiationport\n\n\n",argv[0]);
printf("for example\n\n\n ");
printf("%s 192.168.0.113 192.168.0.99 12345 21\n",argv[0]);
return 0;
}
	bounce(inet_addr(argv[1]),inet_addr(argv[2]),atoi(argv[3]),atoi(argv[4]));

}




 
int bounce(unsigned long int saddr,unsigned long int daddr,int sport,int dport)
{
  fd_set fds;
	
  long rc;
  long rc2;
  int max,count=0;
  SOCKET acceptSocket;
  SOCKET connectedSocket;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf [256];
	  
 

  rc=startWinsock();
	if(rc!=0)
	{
    printf("Fehler: startWinsock, fehler code: %d\n",rc);
    return 1;
	}
	else
	{
    printf("Winsock gestartet!\n");
	}

  // create Socket 
  acceptSocket=socket(PF_INET,SOCK_STREAM,0);
	if(acceptSocket==INVALID_SOCKET)
	{
    printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    return 1;
	}
	else
	{
    printf("Socket erstellt!\n");
	}


  s=socket(PF_INET,SOCK_STREAM,0);
	 if(s==INVALID_SOCKET)
	{
    printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    return 1;
	}
	else
	{
    printf("Socket erstellt!\n");
	}


  
  
  
  
  
  // bind socket
  memset(&addr,0,sizeof(SOCKADDR_IN));
  addr.sin_family=AF_INET;
  addr.sin_port=htons(sport);
  addr.sin_addr.s_addr=saddr;
  rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
	if(rc==SOCKET_ERROR)
	{
    printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
    return 1;
	}
	else
	{
    printf("Socket an port gebunden\n");
	}

  
  
  // go into listen Modus
  rc=listen(acceptSocket,10);
  if(rc==SOCKET_ERROR)
  {
    printf("Fehler: listen, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("acceptSocket ist im listen Modus....\n");
  }


  
  // accept connection
  connectedSocket=accept(acceptSocket,NULL,NULL);
  
  if(connectedSocket==INVALID_SOCKET)
  {
    printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
	
  // connect
  memset(&addr,0,sizeof(SOCKADDR_IN)); 
  addr.sin_family=AF_INET;
  addr.sin_port=htons(dport); 
  addr.sin_addr.s_addr=daddr;
	printf("Neue Verbindung wurde akzeptiert!\n");

	rc2=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
	if(rc2==SOCKET_ERROR)
	{
    printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
    return 1;
	}
	else
	{
    printf("Verbunden\n");
	}



  }


    

	
	max = connectedSocket;
	if ( s> max)
	max = s;

	
	while(rc!=SOCKET_ERROR && rc2!=SOCKET_ERROR)
	{

		   
		   
	FD_ZERO(&fds);
	FD_SET(s, &fds);
	FD_SET(connectedSocket, &fds);
	select(max + 1, &fds, 0, 0, 0);

	 
	
	if(FD_ISSET(connectedSocket,&fds))
	{
	rc=recv(connectedSocket,buf,256,0);  
	buf[rc]='\0';
	send(s,buf,rc,0);
	}

	
	
	if(FD_ISSET(s,&fds))
	{
	rc2=recv(s,buf,256,0);  	
	buf[rc2]='\0';
	send(connectedSocket,buf,rc2,0);   
	}
	

	//Kill bouncer on disconnect
	if(rc==0)
	{
		count++;
		if (count >1)
		break;
	}
 
}

  closesocket(acceptSocket);
  closesocket(connectedSocket);
  WSACleanup();
  return 0;
}



int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}

⌨️ 快捷键说明

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