?? portallogoutsender.c
字號(hào):
#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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -