#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#pragma comment(lib, "ws2_32.lib")
#define VERSION "1.00"
#define TIMEOUT 300
#define MAXSIZE 20480
#define HOSTLEN 40
#define CONNECTNUM 5
#define INVALID_SOCKET -1
typedef unsigned int DWORD;
typedef unsigned int UINT;
//typedef socket_error SOCKET_ERROR;
// define 2 socket struct
typedef struct transocket
{
int fd1;
int fd2;
} MYLPARAM, *PMYLPARAM;
// define function
void usage(char *prog);
//void transmitdata(void *data);
void getctrlc(int j);
void closeallfd();
void makelog(char *buffer, int length);
void bind2conn(int port1, char *host, int port2);
int testifisvalue(char *str);
int create_socket();
int create_server(int sockfd, int port);
int client_connect(int sockfd, char* server, int port);
void * MyTransThread(void *lParam);
// define GLOBAL variable here
extern int errno;
FILE *fp;
int method=0;
//int connectnum=0;
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
//************************************************************************************
//
// function main
//
//************************************************************************************
int main(int argc, char* argv[])
{
char **p;
char sConnectHost[HOSTLEN], sTransmitHost[HOSTLEN];
int iConnectPort=0, iTransmitPort=0;
char *logfile=NULL;
memset(sConnectHost, 0, HOSTLEN);
memset(sTransmitHost, 0, HOSTLEN);
p=argv;
while(*p)
{
if(strcasecmp(*p, "-log") == 0)
{
if(testifisvalue(*(p+1)))
{
logfile = *(++p);
}
else
{
printf("[-] ERROR: Must supply logfile name.\r\n");
return -1;
}
p++;
continue;
}
p++;
}
if(logfile !=NULL)
{
fp=fopen(logfile,"a");
if(fp == NULL )
{
printf("[-] ERROR: open logfile");
return -1;
}
makelog("====== Start ======\r\n", 22);
}
// Win Start Winsock.
//WSADATA wsadata;
//WSAStartup(MAKEWORD(1, 1), &wsadata);
signal(SIGINT, &getctrlc);
if(argc > 3)
{
iConnectPort = atoi(argv[1]);
strncpy(sTransmitHost, argv[2], HOSTLEN);
iTransmitPort = atoi(argv[3]);
bind2conn(iConnectPort, sTransmitHost, iTransmitPort);
}
else usage(argv[0]);
if(method)
{
closeallfd();
}
//WSACleanup();
return 0;
}
void usage(char* prog)
{
printf(" %Tran.exe [-log logfile]\n\n");
return;
}
int testifisvalue(char *str)
{
if(str == NULL ) return(0);
if(str[0]=='-') return(0);
return(1);
}
void bind2conn(int port1, char *host, int port2)
{
int sockfd,sockfd1,sockfd2;
struct sockaddr_in remote;
//int size;
char buffer[1024];
socklen_t cliaddr_len = sizeof(remote);
//HANDLE hThread=NULL;
pthread_t pthd;
transocket sock;
//DWORD dwThreadID;
if (port1 > 65535 || port1 < 1)
{
printf("[-] ConnectPort invalid.\r\n");
return;
}
if (port2 > 65535 || port2 < 1)
{
printf("[-] TransmitPort invalid.\r\n");
return;
}
memset(buffer,0,1024);
if((sockfd=create_socket()) == INVALID_SOCKET) return;
if(create_server(sockfd, port1) == 0)
{
close(sockfd);
return;
}
//size=sizeof(struct sockaddr);
while(1)
{
printf("[+] Waiting for Client ......\r\n");
if((sockfd1=accept(sockfd,(struct sockaddr *)&remote,&cliaddr_len))fd1;
fd2 = ((PMYLPARAM)lParam)->fd2;
memset(host1,0,20);
memset(host2,0,20);
memset(tmpbuf,0,100);
structsize1=sizeof(struct sockaddr);
structsize2=sizeof(struct sockaddr);
if(getpeername(fd1,(struct sockaddr *)&client1,&structsize1)