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

📄 apdbg.c

📁 ZYDAS zd1211b driver for Linux2.4
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <ctype.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <net/if.h>#include <netinet/in.h>#include <linux/sockios.h>#define	ZDAPIOCTL	(SIOCDEVPRIVATE)struct zdap_ioctl{        unsigned short cmd;                /* Command to run */        unsigned long addr;                /* Length of the data buffer */        unsigned long value;               /* Pointer to the data buffer */        unsigned char data[0x100];};/* Declaration of macro and function for handling WEP Keys */#if 0#define SKIP_ELEM { \    while(isxdigit(*p)) \        p++; \}#define SKIP_DELIMETER { \    if(*p == ':' || *p == ' ') \        p++; \}#endifchar hex(char);unsigned char asctohex(char *str);#define ZD_IOCTL_REG_READ			0x01#define ZD_IOCTL_REG_WRITE			0x02#define ZD_IOCTL_MEM_DUMP			0x03#define ZD_IOCTL_RATE       			0x04#define ZD_IOCTL_SNIFFER    			0x05#define ZD_IOCTL_CAM_DUMP   			0x06#define ZD_IOCTL_DUMP_PHY   			0x07#define ZD_IOCTL_CARD_SETTING 			0x08#define ZD_IOCTL_HASH_DUMP			0x09#define ZD_IOCTL_RFD_DUMP			0x0A#define ZD_IOCTL_MEM_READ			0x0B#define ZD_IOCTL_MEM_WRITE			0x0C//for STA#define ZD_IOCTL_TX_RATE			0x0D#define ZD_IOCTL_EEPROM				0x0E#define ZD_IOCTL_BCN				0x10#define ZD_IOCTL_REG_READ16			0x11#define ZD_IOCTL_REG_WRITE16			0x12//for CAM Test#define ZD_IOCTL_CAM_READ			0x13#define ZD_IOCTL_CAM_WRITE			0x14#define ZD_IOCTL_CAM_RESET			0x15#define ZD_IOCTL_READ_PHY			0x16#define ZD_IOCTL_WRITE_PHY			0x17#define ZD_IOCTL_CONT_TX            0x18#define ZD_IOCTL_SET_MIC_CNT_ENABLE 0x19#define ZD_IOCTL_GET_MIC_CNT_ENABLE 0x1A#define ZD_IOCTL_DEBUG_FLAG  0x21char *prgname;int set_ioctl(int sock, struct ifreq *req){        if (ioctl(sock, ZDAPIOCTL, req) < 0)        {                fprintf(stderr, "%s: ioctl(SIOCGIFMAP): %s\n",                        prgname, strerror(errno));                return -1;        }        return 0;}int read_reg(int sock, struct ifreq *req){        struct zdap_ioctl *zdreq = 0;        if (!set_ioctl(sock, req))                return -1;        //zdreq = (struct zdap_ioctl *)req->ifr_data;        //printf( "reg = %4x, value = %4x\n", zdreq->addr, zdreq->value);        return 0;}int read_mem(int sock, struct ifreq *req){        struct zdap_ioctl *zdreq = 0;        int i;        if (!set_ioctl(sock, req))                return -1;        /*zdreq = (struct zdap_ioctl *)req->ifr_data;        printf( "dump mem from %x, length = %x\n", zdreq->addr, zdreq->value);        for (i=0; i<zdreq->value; i++) {            printf("%02x", zdreq->data[i]);            printf(" ");                        if ((i>0) && ((i+1)%16 == 0))                printf("\n");        }*/        return 0;}int main(int argc, char **argv){        int sock;        int addr, value;        struct ifreq req;        char *action = NULL;        struct zdap_ioctl zdreq;        int mode = 0;        prgname = argv[0];        if (argc < 5) {                printf("Usage:\n");                printf("   %s<ifname> [<operation>] [<address>(0)] [<value>(0)]\n\n",  prgname );                printf("\n");                printf("valid operation: mem, phy\n");                printf("camdump, card, rfds, rmem, wmem, rate\n");                printf("hash, eep, rdcam, wrcam, rstcam\n\n");                printf("##### Hardware Memory Operation ######\n");                printf(" rdphy         Read Phy Register\n");                printf(" wrphy         Write Phy Register\n");                printf(" read          Read MAC Register\n");                printf(" write         Write MAC Register\n");                printf("##### Feature Control Operation #####\n");                printf(" g_mic_cnt     Get If WPA counter measure enabled.\n");                printf(" s_mic_cnt     Set WPA counter measure feature\n");                printf(" txrate        Set Fixed Transmission Rate\n");                printf("##### Production Operation #####\n");                printf("tx_cont        Activate Continous TX\n");                printf("##### For CAM function\n");                printf("camdump	       <Addr> <Length>\n");                printf("rdcam          <Addr>\n");                printf("wrcam          <Addr> <Data>\n");                exit(1);        }        strcpy(req.ifr_name, argv[1]);        zdreq.addr = 0;        zdreq.value = 0;        /* a silly raw socket just for ioctl()ling it */        sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);        if (sock < 0) {                fprintf(stderr, "%s: socket(): %s\n", argv[0], strerror(errno));                exit(1);        }        sscanf(argv[3], "%x", &addr);        sscanf(argv[4], "%x", &value);        zdreq.addr = addr;        zdreq.value = value;        if (!strcmp(argv[2], "read")) {                zdreq.cmd = ZD_IOCTL_REG_READ;                goto just_set;        } else if (!strcmp(argv[2], "mem")) {                zdreq.cmd = ZD_IOCTL_MEM_DUMP;                goto just_set;        } else if (!strcmp(argv[2], "write")) {                zdreq.cmd = ZD_IOCTL_REG_WRITE;                goto just_set;        } else if (!strcmp(argv[2], "sniffer")) {                zdreq.cmd = ZD_IOCTL_SNIFFER;                goto just_set;        } else if (!strcmp(argv[2], "camdump")) {                zdreq.cmd = ZD_IOCTL_CAM_DUMP;                goto just_set;        } else if (!strcmp(argv[2], "phy")) {                zdreq.cmd = ZD_IOCTL_DUMP_PHY;                goto just_set;        } else if (!strcmp(argv[2], "rdphy")) {                zdreq.cmd = ZD_IOCTL_READ_PHY;                goto just_set;        } else if (!strcmp(argv[2], "wrphy")) {                zdreq.cmd = ZD_IOCTL_WRITE_PHY;                goto just_set;        }        else if (!strcmp(argv[2], "card")) {                zdreq.cmd = ZD_IOCTL_CARD_SETTING;                goto just_set;        } else if (!strcmp(argv[2], "hash")) {                zdreq.cmd = ZD_IOCTL_HASH_DUMP;                goto just_set;        } else if (!strcmp(argv[2], "rfd")) {                zdreq.cmd = ZD_IOCTL_RFD_DUMP;                goto just_set;        } else if (!strcmp(argv[2], "rmem")) {                zdreq.cmd = ZD_IOCTL_MEM_READ;                goto just_set;        } else if (!strcmp(argv[2], "wmem")) {                zdreq.cmd = ZD_IOCTL_MEM_WRITE;                goto just_set;        } else if (!strcmp(argv[2], "txrate")) {                zdreq.cmd = ZD_IOCTL_TX_RATE;                goto just_set;        } else if (!strcmp(argv[2], "eep")) {                zdreq.cmd = ZD_IOCTL_EEPROM;                goto just_set;        } else if (!strcmp(argv[2], "rate")) {                zdreq.cmd = ZD_IOCTL_RATE;                goto just_set;        } else if(!strcmp(argv[2], "cont_tx")) {                zdreq.cmd = ZD_IOCTL_CONT_TX;                goto just_set;        } else if (!strcmp(argv[2], "bcn")) {                zdreq.cmd = ZD_IOCTL_BCN;                goto just_set;        } else if (!strcmp(argv[2], "read16")) {                zdreq.cmd = ZD_IOCTL_REG_READ16;                goto just_set;        } else if (!strcmp(argv[2], "write16")) {                zdreq.cmd = ZD_IOCTL_REG_WRITE16;                goto just_set;        } else if (!strcmp(argv[2], "rdcam")) {                mode = 1;                zdreq.cmd = ZD_IOCTL_CAM_READ;                goto just_set;        } else if (!strcmp(argv[2], "wrcam")) {                mode = 1;                zdreq.cmd = ZD_IOCTL_CAM_WRITE;                goto just_set;        } else if (!strcmp(argv[2], "rstcam")) {                zdreq.cmd = ZD_IOCTL_CAM_RESET;                goto just_set;        } else if (!strcmp(argv[2], "g_mic_cnt")) {                zdreq.cmd = ZD_IOCTL_GET_MIC_CNT_ENABLE;                goto just_set;        } else if (!strcmp(argv[2], "s_mic_cnt")) {                zdreq.cmd = ZD_IOCTL_SET_MIC_CNT_ENABLE;                goto just_set;        } else if (!strcmp(argv[2], "debugflag")) {                zdreq.cmd = ZD_IOCTL_DEBUG_FLAG;                goto just_set;        } else {                fprintf(stderr, "error action\n");                exit(1);        }just_set:        if(mode == 0)                sscanf(argv[3], "%x", &addr);        else                sscanf(argv[3], "%d", &addr);        sscanf(argv[4], "%x", &value);        zdreq.addr = addr;        zdreq.value = value;        req.ifr_data = (char *)&zdreq;        set_ioctl(sock, &req);fail:        exit(0);}unsigned char asctohex(char *str){        unsigned char value;        value = hex(*str) & 0x0f;        value = value << 4;        str++;        value |= hex(*str) & 0x0f;        return value;}char hex(char v){        if(isdigit(v))                return v - '0';        else if(isxdigit(v))                return (tolower(v) - 'a' + 10);        else                return 0;}

⌨️ 快捷键说明

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