设为首页收藏本站
查看: 440|回复: 0

[其它] 未知世界

[复制链接]
  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 294 天

    [LV.8]以坛为家I

    发表于 2020-10-25 23:34:17 | 显示全部楼层 |阅读模式
    本帖最后由 wolf0000 于 2020-10-25 23:34 编辑

    start......
    1. #include <iostream.h>
    2. #include <stdlib.h>
    3. #include <errno.h>
    4. #include <winsock2.h>
    5. #include <io.h>
    6. #include <signal.h>
    7. #include <string.h>
    8. #include <stdio.h>
    9. #pragma comment(lib, "ws2_32.lib")

    10. //宏定义  文件复制保存为Lcx.cpp

    11. typedef        struct{
    12.         SOCKET        s1;
    13.         SOCKET        s2;
    14.                 }Stu_sock;

    15. //函数声明
    16. void version();
    17. int param(int argc,char **argv);                //对命令行参数
    18. void Funlisten(int port1, int port2);        //监听功能函数
    19. bool bindAndFunlisten(SOCKET s,int port);//绑定socket的地址结构
    20. void datatrans(LPVOID data);                        //数据转发函数
    21. void slave(char* hostIp,char * slaveIp,int destionPort,int slavePort);//slave函数
    22. bool checkIP(char * str);
    23. int client_connect(int sockfd,char* server,int port);//连接服务端

    24. void main(int argc,char **argv)
    25. {
    26.        
    27.         version();
    28.         //参数判断
    29.         WSADATA wsadata;
    30.     WSAStartup(MAKEWORD(1, 1), &wsadata);
    31.         char hostIp[20]={0};
    32.         char slaveIp[20]={0};
    33.         int ret=1;
    34.         ret = param(argc,argv);
    35.         if (ret==1)//Funlisten
    36.         {
    37.         Funlisten(atoi(argv[2]),atoi(argv[3]));
    38.         }else if (ret == 2)
    39.         {
    40.                 strcpy(hostIp,argv[2]);
    41.                 strcpy(slaveIp,argv[4]);
    42.         slave(argv[2],argv[4],atoi(argv[3]),atoi(argv[5]));
    43.         }
    44.        
    45. }

    46. int param(int argc,char **argv)
    47. {
    48.         //stricmp==strcmp ignore case忽略大小写
    49.         if (argc==4&&stricmp(argv[1],"-listen")==0)
    50.         {
    51. //                cout<<"Funlisten"<<endl;
    52.                 return 1;
    53.         }
    54.         if (argc==6&&stricmp(argv[1],"-slave")==0&&checkIP(argv[2])&&checkIP(argv[4]))
    55.         {
    56.                 return 2;
    57.         }else
    58.         {
    59.                         version();
    60.                         return -1;
    61.         }
    62. }
    63. /************************************************************************/
    64. /*                                                                      */
    65. /*                                listen 功能模块                                                                                        */
    66. /************************************************************************/

    67. void Funlisten(int port1,int port2)
    68. {
    69.         Stu_sock        stu_sock;
    70.        
    71.         //创建套接字
    72.         SOCKET sock1=socket(AF_INET,SOCK_STREAM,0);
    73.         SOCKET sock2=socket(AF_INET,SOCK_STREAM,0);
    74.         if (sock1<0||sock1<0)
    75.         {
    76.                 cout<<"[-] Create socket error"<<endl;
    77.                 return;
    78.         }

    79.         //绑定端口到socket并监听
    80.         if (!bindAndFunlisten(sock1,port1)||!bindAndFunlisten(sock2,port2))
    81.         {
    82.                 return;
    83.         }
    84.         //都监听好了接下来……


    85.         int SizeOfAddr=sizeof(sockaddr);
    86.         while (true)
    87.         {
    88.                 cout<<"[+] Waiting for Client ......"<<endl;
    89.                 sockaddr_in        remoteSockAddr;
    90.                 //sock1等待连接
    91.                 SOCKET        recvSock1=accept(sock1,(sockaddr *)&remoteSockAddr,&SizeOfAddr);
    92.                 cout<<recvSock1<<endl;
    93.                 if (recvSock1<0)
    94.                 {
    95.                         cout<<"[-] Accept error."<<endl;
    96.                         continue;
    97.                 }
    98.                 cout<<"[+] Accept a Client on port "<<port1<<"  from "<<inet_ntoa(remoteSockAddr.sin_addr)<<endl;
    99.                 cout<<"[+] Waiting another Client on port:"<<port2<<"...."<<endl;
    100.                        
    101.                 SOCKET        recvSock2=accept(sock2,(sockaddr *)&remoteSockAddr,&SizeOfAddr);
    102.                 cout<<recvSock2<<endl;
    103.                 if (recvSock2<0)
    104.                 {
    105.                         cout<<"[-] Accept error."<<endl;
    106.                         continue;
    107.                 }
    108.                 cout<<"[+] Accept a Client on port"<<port1<<"  from "<<inet_ntoa(remoteSockAddr.sin_addr)<<endl;

    109.                 //两个都连上来了
    110.                 cout<<"[+] Accept Connect OK!"<<endl;
    111.                
    112.                
    113.                 stu_sock.s1=recvSock1;                stu_sock.s2=recvSock2;
    114.                 DWORD        dwThreadID;
    115.                
    116.                 //创建一个转发数据的线程
    117.                 HANDLE        hThread=CreateThread(0,0,(LPTHREAD_START_ROUTINE)datatrans,(LPVOID)&stu_sock,0,&dwThreadID);
    118.                 if (hThread==NULL)
    119.                 {
    120.                         TerminateThread(hThread,0);
    121.                         return;//线程错了直接退出
    122.                 }
    123.                 cout<<"[+] CreateThread OK!"<<endl;
    124.                 Sleep(800);//挂起当前线程
    125.                
    126.                 //
    127.         }



    128. }

    129. bool bindAndFunlisten(SOCKET s,int port)
    130. {
    131.         //地址结构
    132.         sockaddr_in        addr;
    133.         memset(&addr,0,sizeof(addr));
    134.         addr.sin_port=htons(port);
    135.         addr.sin_family=AF_INET;
    136.         addr.sin_addr.s_addr=htonl(INADDR_ANY);

    137.         char on =1;
    138.         setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));

    139.         //绑定地址结构
    140.         if (bind(s,(const sockaddr *)&addr,sizeof(sockaddr))<0)
    141.         {
    142.                 cout<<"[-] Socket bind error."<<endl;
    143.                 return false;
    144.         }
    145.        
    146.         //监听端口
    147.         if (listen(s,5)<0)
    148.         {
    149.                 cout<<"[-] Listen error."<<endl;
    150.                 return false;
    151.         }
    152.         return true;
    153. }

    154. void datatrans(LPVOID data)
    155. {
    156.         char host_slave[20]={0};
    157.         char host_hacker[20]={0};
    158.         Stu_sock *stuSock=(Stu_sock *)data;
    159.         SOCKET        s1=stuSock->s1;        //接受的是slave的数据
    160.         SOCKET        s2=stuSock->s2;        //发送出去的socket
    161.         int        sentacount1=0;
    162. //        cout<<stuSock->s1<<endl;
    163. //        cout<<stuSock->s2<<endl;


    164.         sockaddr_in        addr={0};
    165.         int sizeofaddr=sizeof(sockaddr);
    166.        
    167.         if (getpeername(s1,(sockaddr *)&addr,&sizeofaddr))
    168.         {

    169.                 strcpy(host_slave,inet_ntoa(addr.sin_addr));
    170.                 int port_slave=ntohs(addr.sin_port);
    171.         }
    172.         if (getpeername(s2,(sockaddr *)&addr,&sizeofaddr))
    173.         {

    174.                 strcpy(host_hacker,inet_ntoa(addr.sin_addr));
    175.                 int port_hacker=ntohs(addr.sin_port);
    176.         }
    177.         cout<<"[+] Start Transport ("<<host_slave<<"<-> "<<host_hacker<<") ......"<<endl;
    178.         char RecvBuffer[20480];
    179.         char SendBuffer[20480];

    180.        
    181.         fd_set        readfd;fd_set        writefd;
    182.         timeval        timeset;
    183.         timeset.tv_sec=300;
    184.         timeset.tv_usec=0;
    185.         int maxfd=max(s1,s2)+1;
    186.                 bool flag=false;
    187.                 int readsize;
    188.         while (TRUE)
    189.         {
    190.                
    191.        
    192.                 readsize=0;
    193.                 FD_ZERO(&readfd);
    194.                 FD_ZERO(&writefd);
    195.                 FD_SET((UINT)s1,&readfd);
    196.                 FD_SET((UINT)s2,&readfd);
    197.                 FD_SET((UINT)s1,&writefd);
    198.                 FD_SET((UINT)s2,&writefd);


    199.                 int result=select(maxfd,&readfd,&writefd,NULL,&timeset);

    200.                 if (result<0 && (errno!=EINTR))               
    201.                 {
    202.                         cout<<"[-] Select error."<<endl;
    203.                         break;
    204.                 }
    205.                 else if (result==0)
    206.                 {
    207.                         cout<<"[-] Socket time out."<<endl;
    208.                         break;
    209.                 }

    210.                 //没出错,没超时
    211.                 if (FD_ISSET(s1,&readfd)&&flag)///////////////////////////////////1
    212.                 {
    213.         //                if (totalread1<20408)
    214.                         {
    215.                                  readsize=recv(s1, RecvBuffer, 20480, 0);//接受host的请求。。
    216.                                  if (readsize==-1)
    217.                                  {
    218.                                          break;
    219.                                  }
    220.                                  if (readsize==SOCKET_ERROR||readsize==0)
    221.                                  {
    222.                                          cout<<"!!!"<<endl;
    223.                                  }
    224.                                  memcpy(SendBuffer,RecvBuffer,readsize);
    225.                                  memset(RecvBuffer,0,20480);
    226.                                 cout<<" [+] Recv "<<readsize<<" bytes "<<"from host."<<endl;
    227.                         }
    228.                 }


    229.                 if (FD_ISSET(s1,&writefd)&&flag&&(readsize>0))///////////////////////////////////2
    230.                 {

    231.                         int sendsize=send(s2,SendBuffer,readsize,0);//发给slave
    232.                         if (sendsize==0)
    233.                         {
    234.                                 break;
    235.                         }
    236.                         if (sendsize<0 && (errno!=EINTR))
    237.                         {
    238.                                 cout<<"[-] Send to s2 unknow error."<<endl;
    239.                                 break;
    240.                         }
    241.                        
    242.                         memset(SendBuffer,0,20480);
    243.                         cout<<" Send "<<sendsize<<" bytes "<<endl;
    244.                                                
    245.                 }
    246.                 if (FD_ISSET(s2,&readfd)&&(!flag))///////////////////////////////////3
    247.                 {
    248.                         {
    249.                                 readsize=recv(s2, RecvBuffer, 20480, 0);//接受slave返回数据
    250.                                
    251.                                 memcpy(SendBuffer,RecvBuffer,readsize);
    252.                                 cout<<" [+] Recv "<<readsize<<" bytes "<<"from host."<<endl;
    253.                                 //totalread1+=readsize;
    254.                                 memset(RecvBuffer,0,20480);
    255.                         }
    256.                 }
    257.                 if (FD_ISSET(s1,&writefd)&&(!flag)&&(readsize>0))///////////////////////////////////4
    258.                 {
    259.                         readsize=send(s1,SendBuffer,readsize,0);//发给host
    260.                         if (readsize==0)
    261.                         {
    262.                                 break;
    263.                         }
    264.                         if (readsize<0)
    265.                         {
    266.                                 cout<<"[-] Send to s2 unknow error."<<endl;
    267.                                 break;
    268.                         }
    269.                         cout<<" Send "<<readsize<<" bytes "<<endl;
    270.                         memset(SendBuffer,0,20480);
    271.                                        
    272.                 }

    273.                 flag=!flag;

    274.                 Sleep(5);


    275.         }
    276.         closesocket(s1);
    277.         closesocket(s2);
    278.         cout<<"[+] OK! I Closed The Two Socket."<<endl;
    279. }

    280. /************************************************************************/
    281. /*                                                                      */
    282. /*                                slave 功能模块                                                                                        */
    283. /************************************************************************/
    284. void slave(char* hostIp,char * slaveIp,int destionPort,int slavePort)
    285. {
    286.        
    287.         //checkIP(hostIp);
    288.                 Stu_sock        stu_sock;
    289.                 fd_set                fd;
    290.                 char                buffer[20480];
    291.                 int                        l;
    292.         while(TRUE)
    293.         {
    294.                 //创建套接字
    295.                 SOCKET sock1=socket(AF_INET,SOCK_STREAM,0);
    296.                 SOCKET sock2=socket(AF_INET,SOCK_STREAM,0);

    297.                 cout<<"[+] Make a Connection to "<<hostIp<<"on port:"<<slaveIp<<"...."<<endl;
    298.                 if (sock1<0||sock1<0)
    299.                 {
    300.                         cout<<"[-] Create socket error"<<endl;
    301.                         return;
    302.                 }
    303.                 //
    304.                 fflush(stdout);
    305.                 if(client_connect(sock1,hostIp,destionPort)==0)
    306.                 {
    307.                         closesocket(sock1);
    308.                         closesocket(sock2);
    309.                         continue;/*跳过这次循环*/
    310.            }
    311.                
    312.         memset(buffer,0,20480);
    313.         while(1)
    314.         {
    315.                 //把sock清零,加入set集
    316.                 FD_ZERO(&fd);
    317.                 FD_SET(sock1, &fd);
    318.                
    319.                 //select事件        读 写 异常
    320.                 if (select(sock1+1, &fd, NULL, NULL, NULL) == SOCKET_ERROR)
    321.                 {
    322.                         //不懂
    323.                         if (errno == WSAEINTR) continue;
    324.                         break;
    325.                 }
    326.                 //FD_ISSET返回值>0 表示SET里的可读写
    327.                 if (FD_ISSET(sock1, &fd))
    328.                 {
    329.                         l=recv(sock1, buffer, 20480, 0);
    330.                         break;
    331.                 }
    332.                 Sleep(5);
    333.      }
    334.                
    335.         if(l<=0)
    336.         {      
    337.                 cout<<"[-] There is a error...Create a new connection."<<endl;
    338.                 continue;
    339.     }
    340.         while(1)
    341.         {
    342.         cout<<"[+] Connect OK!    \n[+] xlcTeam congratulations!"<<endl;
    343.         cout<<"[+] Make a Connection to "<<hostIp<<"on port:"<<slaveIp<<"...."<<endl;
    344.                 fflush(stdout);
    345.                 if(client_connect(sock2,slaveIp,slavePort)==0)
    346.                 {
    347.                         closesocket(sock1);
    348.                         closesocket(sock2);
    349.                         continue;
    350.                 }
    351.                
    352.                 if(send(sock2,buffer,l,0)==SOCKET_ERROR)
    353.                 {      
    354.                         cout<<"[-] Send failed."<<endl;
    355.                         continue;
    356.                 }
    357.                
    358.                 l=0;
    359.                 memset(buffer,0,20480);
    360.                 break;
    361.     }

    362.         cout<<"[+] All Connect OK!"<<endl;
    363.        
    364.         stu_sock.s1 = sock1;
    365.         stu_sock.s2 = sock2;
    366.        
    367.         HANDLE        hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)datatrans, (LPVOID)&stu_sock, 0, NULL);
    368.         if(hThread == NULL)
    369.         {
    370.                 TerminateThread(hThread, 0);
    371.                 return;
    372.         }

    373.         }
    374. }

    375. //检查IP地址格式是否正确
    376. bool checkIP(char * str)
    377. {
    378.         if(INADDR_NONE == inet_addr(str))
    379.                 return FALSE;
    380.         return true;
    381. }

    382. int client_connect(int sockfd,char* server,int port)
    383. {                                        /*sock*/                /*远程IP*/        /*远程端口*/
    384.        
    385.         //声明
    386.         struct sockaddr_in cliaddr;       
    387.         struct hostent *host;
    388.        
    389.         if(!(host=gethostbyname(server)))        //获得远程主机的IP
    390.         {
    391.      //   printf("[-] Gethostbyname(%s) error:%s\n",server,strerror(errno));
    392.         return(0);
    393.         }      
    394.         //给地址结构赋值
    395.         memset(&cliaddr, 0, sizeof(struct sockaddr));
    396.         cliaddr.sin_family=AF_INET;
    397.         cliaddr.sin_port=htons(port);/*远程端口*/
    398.         cliaddr.sin_addr=*((struct in_addr *)host->h_addr);//host ip
    399.        
    400.         //去连接远程正在listen的主机
    401.         if(connect(sockfd,(struct sockaddr *)&cliaddr,sizeof(struct sockaddr))<0)
    402.         {
    403. //        printf("[-] Connect error.\r\n");
    404.         return(0);
    405.         }
    406.         return(1);
    407. }

    408. void version()
    409.        
    410. {        cout<<"xlc v1.0 -Port Transport by Chris "<<endl;
    411.         cout<<"      _     _____                    "<<endl;
    412.         cout<<"__  _| | __|_   _|__  __ _ _ __ ___  "<<endl;
    413.         cout<<"\\ \\/ / |/ __|| |/ _ \\/ _` | '_ ` _ \\ "<<endl;
    414.         cout<<" >  <| | (__ | |  __/ (_| | | | | | |"<<endl;
    415.         cout<<"/_/\\_\\_|\\___||_|\\___|\\__,_|_| |_| |_|"<<endl;
    416.         cout<<endl;
    417.         cout<<"site:http://sec.xlcteam.com"<<endl<<endl;
    418.         cout<<"usage: xlc.exe [options]"<<endl;
    419.         cout<<endl;
    420.         cout<<"options:"<<endl;
    421.         cout<<"-slave  remoteIp remotePort1  localIp  localPort"<<endl;
    422.         cout<<"-listen  remotePort1 remotePort2"<<endl;
    423.         cout<<endl;
    424.         cout<<"e.g.:"<<endl;
    425.         cout<<"xlc.exe -slave  202.119.225.35 51 192.168.0.11 3389"<<endl;
    426.         cout<<"xlc.exe -listen 51  33891"<<endl;
    427.         cout<<endl;
    428. }
    复制代码

    end......来自群组: 中国红客联盟新手组

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐 上一条 /3 下一条

    红盟社区--中国红客联盟 

    Processed in 0.093430 second(s), 15 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    Powered by HUC © 2001-2017 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表