📄 bounce.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 + -