LCX源码 [转]

来源:互联网 发布:美国原油数据公布网站 编辑:程序博客网 时间:2024/05/16 23:32
[code]


#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <signal.h>
#include <errno.h>
#include <io.h>

#pragma comment(lib, "ws2_32.lib")

#define VERSION "1.00"
#define TIMEOUT 300
#define MAXSIZE 20480
#define HOSTLEN 40
#define CONNECTNUM 5

// define 2 socket struct
struct transocket
{
SOCKET fd1;
SOCKET fd2;
};

// define function
void ver();
void usage(char *prog);
void transmitdata(LPVOID data);
void getctrlc(int j);
void closeallfd();
void makelog(char *buffer, int length);
void proxy(int port);
void bind2bind(int port1, int port2);
void bind2conn(int port1, char *host, int port2);
void conn2conn(char *host1, int port1, char *host2, intport2);
int testifisvalue(char *str);
int create_socket();
int create_server(int sockfd, int port);
int client_connect(int sockfd, char* server, int port);

// define GLOBAL variable here
extern int errno;
FILE *fp;
int method=0;
//int connectnum=0;

/

if((sockfd1=create_socket())==0) return;
if((sockfd2=create_socket())==0) return;

printf("[+] Make a Connection to%s:%d....\r\n",host1,port1);
fflush(stdout);
if(client_connect(sockfd1,host1,port1)==0)
{
closesocket(sockfd1);
closesocket(sockfd2);
continue;
}

// fix by bkbll
// if host1:port1 recved data, than connect to host2,port2
l=0;
memset(buffer,0,MAXSIZE);
while(1)
{
FD_ZERO(&fds);
FD_SET(sockfd1, &fds);

if (select(sockfd1+1, &fds, NULL, NULL, NULL) ==SOCKET_ERROR)
{
if (errno == WSAEINTR) continue;
break;
}
if (FD_ISSET(sockfd1, &fds))
{
l=recv(sockfd1, buffer, MAXSIZE, 0);
break;
}
Sleep(5);
}

if(l<=0)
{
printf("[-] There is a error...Create a newconnection.\r\n");
continue;
}
while(1)
{
printf("[+] Connect OK!\r\n");
printf("[+] Make a Connection to %s:%d....\r\n",host2,port2);
fflush(stdout);
if(client_connect(sockfd2,host2,port2)==0)
{
closesocket(sockfd1);
closesocket(sockfd2);
continue;
}

if(send(sockfd2,buffer,l,0)==SOCKET_ERROR)
{
printf("[-] Send failed.\r\n");
continue;
}

l=0;
memset(buffer,0,MAXSIZE);
break;
}

printf("[+] All Connect OK!\r\n");

sock.fd1 = sockfd1;
sock.fd2 = sockfd2;

hThread = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)transmitdata,(LPVOID)&sock, 0,&dwThreadID);
if(hThread == NULL)
{
TerminateThread(hThread, 0);
return;
}

// connectnum++;

Sleep(1000);
printf("[+] CreateThread OK!\r\n\n");
}
}

/
if(totalread1) {
read1=recv(fd1, read_in1, MAXSIZE-totalread1, 0);
if((read1==SOCKET_ERROR) || (read1==0))
{
printf("[-] Read fd1 data error,maybe close?\r\n");
break;
}

memcpy(send_out1+totalread1,read_in1,read1);
sprintf(tmpbuf,"\r\nRecv %5d bytes from %s:%d\r\n", read1, host1,port1);
printf(" Recv %5d bytes %16s:%d\r\n", read1, host1, port1);
makelog(tmpbuf,strlen(tmpbuf));
makelog(read_in1,read1);
totalread1+=read1;
memset(read_in1,0,MAXSIZE);
}
}

if(FD_ISSET(fd2, &writefd))
{
int err=0;
sendcount1=0;
while(totalread1>0)
{
send1=send(fd2, send_out1+sendcount1, totalread1, 0);
if(send1==0)break;
if((send1<0) &&(errno!=EINTR))
{
printf("[-] Send to fd2 unknow error.\r\n");
err=1;
break;
}

if((send1<0) &&(errno==ENOSPC)) break;
sendcount1+=send1;
totalread1-=send1;

printf(" Send %5d bytes %16s:%d\r\n", send1, host2,port2);
}

if(err==1) break;
if((totalread1>0) &&(sendcount1>0))
{

memcpy(send_out1,send_out1+sendcount1,totalread1);
memset(send_out1+totalread1,0,MAXSIZE-totalread1);
}
else
memset(send_out1,0,MAXSIZE);
}

if(FD_ISSET(fd2, &readfd))
{
if(totalread2) {
read2=recv(fd2,read_in2,MAXSIZE-totalread2, 0);
if(read2==0)break;
if((read2<0) &&(errno!=EINTR))
{
printf("[-] Read fd2 data error,maybe close?\r\n\r\n");
break;
}

memcpy(send_out2+totalread2,read_in2,read2);
sprintf(tmpbuf, "\r\nRecv %5d bytes from %s:%d\r\n", read2, host2,port2);
printf(" Recv %5d bytes %16s:%d\r\n", read2, host2, port2);
makelog(tmpbuf,strlen(tmpbuf));
makelog(read_in2,read2);
totalread2+=read2;
memset(read_in2,0,MAXSIZE);
}
}

if(FD_ISSET(fd1, &writefd))
{
int err2=0;
sendcount2=0;
while(totalread2>0)
{
send2=send(fd1, send_out2+sendcount2, totalread2, 0);
if(send2==0)break;
if((send2<0) &&(errno!=EINTR))
{
printf("[-] Send to fd1 unknow error.\r\n");
err2=1;
break;
}
if((send2<0) &&(errno==ENOSPC)) break;
sendcount2+=send2;
totalread2-=send2;

printf(" Send %5d bytes %16s:%d\r\n", send2, host1,port1);
}
if(err2==1) break;
if((totalread2>0) &&(sendcount2 > 0))
{

memcpy(send_out2, send_out2+sendcount2, totalread2);
memset(send_out2+totalread2, 0, MAXSIZE-totalread2);
}
else
memset(send_out2,0,MAXSIZE);
}

Sleep(5);
}

closesocket(fd1);
closesocket(fd2);
// if(method == 3)
// connectnum --;

printf("\r\n[+] OK! I Closed The Two Socket.\r\n");
}

void getctrlc(int j)
{
printf("\r\n[-] Received Ctrl+C\r\n");
closeallfd();
exit(0);
}

void closeallfd()
{
int i;

printf("[+] Let me exit ......\r\n");
fflush(stdout);

for(i=3; i<256; i++)
{
closesocket(i);
}

if(fp != NULL)
{
fprintf(fp,"\r\n====== Exit ======\r\n");
fclose(fp);
}

printf("[+] All Right!\r\n");
}

int create_socket()
{
int sockfd;

sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf("[-] Create socket error.\r\n");
return(0);
}

return(sockfd);
}

int create_server(int sockfd,int port)
{
struct sockaddr_in srvaddr;
int on=1;

memset(&srvaddr, 0, sizeof(structsockaddr));

srvaddr.sin_port=htons(port);
srvaddr.sin_family=AF_INET;
srvaddr.sin_addr.s_addr=htonl(INADDR_ANY);

setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&on,sizeof(on)); //so I can rebind theport

if(bind(sockfd,(struct sockaddr*)&srvaddr,sizeof(structsockaddr))<0)
{
printf("[-] Socket bind error.\r\n");
return(0);
}

if(listen(sockfd,CONNECTNUM)<0)
{
printf("[-] Socket Listen error.\r\n");
return(0);
}

return(1);
}

int client_connect(int sockfd,char* server,int port)
{
struct sockaddr_in cliaddr;
struct hostent *host;

if(!(host=gethostbyname(server)))
{
printf("[-] Gethostbyname(%s)error:%s\n",server,strerror(errno));
return(0);
}

memset(&cliaddr, 0, sizeof(structsockaddr));
cliaddr.sin_family=AF_INET;
cliaddr.sin_port=htons(port);
cliaddr.sin_addr=*((struct in_addr*)host->h_addr);

if(connect(sockfd,(struct sockaddr*)&cliaddr,sizeof(structsockaddr))<0)
{
printf("[-] Connect error.\r\n");
return(0);
}
return(1);
}

void makelog(char *buffer,int length)
{
if(fp !=NULL)
{
// fprintf(fp, "%s", buffer);
// printf("%s",buffer);
write(fileno(fp),buffer,length);
// fflush(fp);
}
}


[/code]
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为手机无线网信号差怎么办 华为麦芒6数据信号差怎么办 华为麦芒54g信号差怎么办 华为手机wifi信号差怎么办 华为手机导航信号弱怎么办 华为手机gps信号弱怎么办 麦芒5指纹消失了怎么办 华为应用锁密码忘了怎么办 华为麦芒5密码忘了怎么办 华为卡1无服务怎么办 经常卡1无服务怎么办 华为手机进水无服务怎么办 苹果手机进水后无服务怎么办 苹果6进水无服务怎么办 华为手机突然无服务怎么办 sim卡显示无服务怎么办 华为麦芒进水无限开关机怎么办 华为麦芒5进水黑屏怎么办 华为麦芒6进水了怎么办 4g手机开不开机怎么办 全屏钢化膜总是翘边怎么办 华为麦芒屏幕触屏失灵怎么办 华为麦芒5运行慢怎么办 手机屏保密码忘记了怎么办 麦芒5密码锁忘了怎么办 超薄手机壳松了怎么办 华为麦芒5声音小怎么办 笔记本外壳a面裂了怎么办 苹果手机外壳摔坏了怎么办 挂衣服肩膀出包怎么办 摩拜单车手机号注销了怎么办 摩拜单车手机号码换了怎么办 摩拜单车换手机号码打不开怎么办 摩拜单车丢了怎么办 摩拜单车忘锁了怎么办 透明手机壳粘指纹怎么办 tpu手机壳变黄了怎么办 0pp0手机声音小怎么办 橡胶皮套晒坏了怎么办 宝宝晚上吹空调发烧怎么办 玩手机手指尖疼怎么办