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

📄 portallogoutsender.c

📁 开发环境为vxworks
💻 C
字号:
#include <pcap.h>
#include <winsock2.h>
#include <io.h>
#include <stdio.h>
#include <errno.h>
#include <windows.h>
#include <process.h>

#pragma pack(push, 1)
typedef struct prtl_hdr
{
    unsigned char    ver;
    unsigned char    type;
    unsigned char    exmode;     /* only available for type 3 */
    unsigned char    rsv;
    unsigned short   sn;         /* serial no */
    unsigned short   reqid;      /* request id */
    unsigned long    usrip;
    unsigned short   usrport;
    unsigned char    errcode;    /* error code */
    unsigned char    attrnum;    /* attribute counter */
} prtl_hdr;
#pragma pack(pop)


/****** 首部中各字段取值的宏定义 *****/
/* Ver定义 */
#define PORTALPROTOCAL_VER                                  0x01
/* Type定义 */
#define PORTALPROTOCAL_TYPE_REQ_CHALLENGE                   0x01
#define PORTALPROTOCAL_TYPE_ACK_CHALLENGE                   0x02
#define PORTALPROTOCAL_TYPE_REQ_AUTH                        0x03
#define PORTALPROTOCAL_TYPE_ACK_AUTH                        0x04
#define PORTALPROTOCAL_TYPE_REQ_LOGOUT                      0x05
#define PORTALPROTOCAL_TYPE_ACK_LOGOUT                      0x06
#define PORTALPROTOCAL_TYPE_AFF_ACK_AUTH                    0x07
#define PORTALPROTOCAL_TYPE_NTF_LOGOUT                      0x08
#define PORTALPROTOCAL_TYPE_REQ_INFO                        0x09
#define PORTALPROTOCAL_TYPE_ACK_INFO                        0x0A
/* ChapPap定义 */
#define PORTALPROTOCAL_CHAPPAP_CHAP                         0x00
#define PORTALPROTOCAL_CHAPPAP_PAP                          0x01
/* ErrCode定义*/
#define PORTALPROTOCAL_ERRCODE_REQCHALLENGE_SUCCESS         0x00
#define PORTALPROTOCAL_ERRCODE_REQCHALLENGE_REJECTED        0x01
#define PORTALPROTOCAL_ERRCODE_REQCHALLENGE_ERROR           0x04
#define PORTALPROTOCAL_ERRCODE_REQAUTH_SUCCESS              0x00
#define PORTALPROTOCAL_ERRCODE_REQAUTH_REJECTED             0x01
#define PORTALPROTOCAL_ERRCODE_REQAUTH_ERROR                0x04
#define PORTALPROTOCAL_ERRCODE_CONNECTION_ESTABLISHED       0x02
#define PORTALPROTOCAL_ERRCODE_USER_BEING_AUTHENTICATED     0x03
#define PORTALPROTOCAL_ERRCODE_REQLOGOUT_USERREQUEST        0x00
#define PORTALPROTOCAL_ERRCODE_REQLOGOUT_RESPONSETIMEOUT    0x01
#define PORTALPROTOCAL_ERRCODE_ACKLOGOUT_SUCCESS            0x00
#define PORTALPROTOCAL_ERRCODE_ACKLOGOUT_REJECTED           0x01
#define PORTALPROTOCAL_ERRCODE_ACKLOGOUT_ERROR              0x02
#define PORTALPROTOCAL_ERRCODE_NTFLOGOUT                    0x0
#define PORTALPROTOCAL_ERRCODE_ACKINFO_SUCCESS              0x00
#define PORTALPROTOCAL_ERRCODE_ACKINFO_NOTSUPPORTED         0x01
#define PORTALPROTOCAL_ERRCODE_ACKINFO_ERROR                0x02

#define PORTALPROTOCAL_ATTRTYPE_USERNAME                    0x01
#define PORTALPROTOCAL_ATTRTYPE_PASSWORD                    0x02
#define PORTALPROTOCAL_ATTRTYPE_CHALLENGE                   0x03
#define PORTALPROTOCAL_ATTRTYPE_CHAPPASSWORD                0x04

#define PORTALPROTOCAL_ATTRLEN_MAX_USERNAME                 32
#define PORTALPROTOCAL_ATTRLEN_MAX_PASSWORD                 16
#define PORTALPROTOCAL_ATTRLEN_CHALLENGE                    16
#define PORTALPROTOCAL_ATTRLEN_CHAPPASSWORD                 16

u_long  g_intrvl_btwn_usrs  = 100;
u_long  g_intrvl_btwn_loops = 10 * CLK_TCK;
u_short g_serial_nmbr = 0;
u_short g_dst_port = 2000;
u_long  g_dst_ip = 0;
u_long  g_usr_start_ip = 0;
u_long  g_usr_end_ip = 0;
BOOL    g_loop_flag = FALSE;

int main(u_long argc, char *argv[])
{
    u_long      i;
    SOCKET      skt = INVALID_SOCKET;
    SOCKADDR_IN sin;
    WSADATA     wsaData;
    prtl_hdr    prtlhdr;
    u_long      usrip;
    char        usage[] =
                {
                    "\n"
                    "PORTAL logout packet sender, wirtten by wuy.\n"
                    "Contact wuy@zoomtech.com.cn.\n"
                    "\n"
                    "Usage  :\n"
                    "\t%s [-i dstip] [-p dstport] [-s startip] [-e endip] [-w intrvlbtwnusrs] [-t [-W intrvlbtwnloops]]\n"
                    "Options:\n"
                    "\t-i\tSpecify destination ip.\n"
                    "\t-p\tSpecify destination port, default 2000.\n"
                    "\t-w\tSpecify interval in milliseconds between two users, default 1000 ms.\n"
                    "\t-W\tSpecify interval in milliseconds between two rounds, default 10000 ms.\n"
                    "\t-s\tSpecify user start ip address.\n"
                    "\t-e\tSpecify user end ip address.\n"
                    "\t-t\tSend packets forever.\n"
                };

    if (1 == argc)
    {
        printf(usage, argv[0]);
        return 0;
    }

    for (i = 1; i < argc; i ++)
    {
        if (argv[i][0] == '-')
        {
            switch (argv[i][1])
            {
                case 'i':
                    if (INADDR_NONE == (g_dst_ip = inet_addr(argv[i + 1]))) return -1;
                    break;

                case 'p':
                    g_dst_port = atoi(argv[i + 1]);
                    break;

                case 's':
                    if (INADDR_NONE == (g_usr_start_ip = inet_addr(argv[i + 1]))) return -1;
                    g_usr_start_ip = ntohl(g_usr_start_ip);
                    break;

                case 'e':
                    if (INADDR_NONE == (g_usr_end_ip = inet_addr(argv[i + 1]))) return -1;
                    g_usr_end_ip = ntohl(g_usr_end_ip);
                    break;

                case 'w':
                    g_intrvl_btwn_usrs = atol(argv[i + 1]);
                    break;

                case 'W':
                    g_intrvl_btwn_loops = atol(argv[i + 1]);
                    break;

                case 't':
                    g_loop_flag = TRUE;
                    break;

                default:
                    printf(usage, argv[0]);
                    return 0;
            }
        }
    }

    WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
    {
        /* Tell the user that we could not find a usable WinSock DLL */
        printf("Winsock 2.2 not supported in this system!\n");

        WSACleanup();
        return -1;
    }

    if (INVALID_SOCKET == (skt = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)))
    {
        printf("socket failed!\n");
        goto quit;
    }

    memset((char *)&sin, 0, sizeof(sin));
    sin.sin_family      = AF_INET;
    sin.sin_addr.s_addr = g_dst_ip;
    sin.sin_port        = htons(g_dst_port);

    memset((char *)&prtlhdr, 0, sizeof(prtlhdr));
    prtlhdr.ver     = PORTALPROTOCAL_VER;
    prtlhdr.type    = PORTALPROTOCAL_TYPE_REQ_LOGOUT;
    prtlhdr.exmode  = PORTALPROTOCAL_CHAPPAP_CHAP;
    prtlhdr.rsv     = 0;
    prtlhdr.reqid   = 0;
    prtlhdr.usrport = 0;
    prtlhdr.errcode = 0;
    prtlhdr.attrnum = 0;

send:

    for (usrip = g_usr_start_ip; usrip <= g_usr_end_ip; usrip ++)
    {
        prtlhdr.sn    = g_serial_nmbr ++;
        prtlhdr.usrip = htonl(usrip);

        if (SOCKET_ERROR == sendto(skt, (char *)&prtlhdr, sizeof(prtlhdr), 0, (struct sockaddr *)&sin, sizeof(sin)))
        {
            printf("sendto failed, error code = %d", WSAGetLastError());
        }

        Sleep(g_intrvl_btwn_usrs);
    }

    if (g_loop_flag)
    {
        Sleep(g_intrvl_btwn_loops);
        goto send;
    }

quit:

    if (INVALID_SOCKET != skt) close(skt);

    WSACleanup();

    return 0;
}

⌨️ 快捷键说明

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