#include #include #include #include #include #include #include #define USE_OLD_FUNCTIONS #define DBCONFIG "/etc/asterisk/exten_gen.ini" //#define PNPCONF "/etc/asterisk/pnp.conf" //#define CMD "arp-scan -I eth0 --localnet | grep '..:..:'|awk -F ' ' '{print $1,$2}' > /tmp/dis.tmp" #define TMP "/tmp/dis.tmp" #define SIZE 256 char *getconfig(const char *file_path, const char *name) { char str[SIZE] = {0}; char *p; char *value; int tmp = 0; int len = 0; FILE *fp = fopen(file_path, "r"); while(fgets(str, SIZE, fp)){ if(strstr(str, name)){ p = strstr(str, "="); len = p - str; value = malloc(50); bzero(value,50); while(str[len] != '\n'){ if(str[len] == ' ' || str[len] == '='){ len++; continue; }else value[tmp++] = str[len++]; } //printf("%s : %s\n",name, value); break; } } return value; } MYSQL *connect_mysql(MYSQL *conn) { char *dbserver = getconfig(DBCONFIG, "dbserverip"); char *dbuser = getconfig(DBCONFIG, "dbuser"); char *dbpasswd = getconfig(DBCONFIG, "dbpasswd"); char *dbname = getconfig(DBCONFIG, "dbname"); mysql_init(conn); if(mysql_real_connect(conn, dbserver, dbuser, dbpasswd, dbname,0,"",0)){ printf("Connected to mysql !\n"); }else{ printf("error:%s\n",mysql_error(conn)); return NULL; } int utf8; utf8=mysql_query(conn,"set names utf8"); return conn; } MYSQL conn; MYSQL_RES *res; int main(int argc, char *argv[]) { int i = 0, j = 0, mx = 0; char buf[SIZE]={0}, ip[50], mac[50]; char sql[SIZE] = {0}; char *pos = NULL; char ch = 0; char CMD[SIZE] = {0}; char m[6]={0}; //char *dev = getconfig(PNPCONF, "pnp_interface"); MYSQL *conn_mysql = &conn; if (connect_mysql(conn_mysql) == NULL) return -1; //sprintf(CMD,"arp-scan -I %s --localnet | grep '..:..:'|awk -F ' ' '{print $1,$2}' > /tmp/dis.tmp",dev); sprintf(CMD,"arp-scan -I eth0 --localnet | grep '..:..:'|awk -F ' ' '{print $1,$2}' > /tmp/dis.tmp"); //printf("%s\n",CMD); system(CMD); //get arp info //free(dev); FILE *fp = fopen(TMP,"r"); while(fgets(buf, SIZE, fp)) { pos = strstr(buf, " "); i = pos -buf; bzero(ip, 50); strncpy(ip, buf, i); while(buf[i++]){ if(buf[i] != ' ' && buf[i] != '\n'){ if(buf[i] != ':') mac[j++] = buf[i]; }else{ continue; } } bzero(sql, SIZE); if(!strncmp(mac, "68692e", 6)){ bzero(m,6); sscanf(mac, "%02x%02x%02x%02x%02x%02x",&m[0], &m[1], &m[2], &m[3], &m[4], &m[5]); int a=m[3] & 0x000000FF; int a1=m[4] & 0x000000FF; int a2=m[5] & 0x000000FF; mx = (a << 16)|(a1 << 8)|a2; //printf("===%x\n",mx); if(0x006D3F < mx && mx < 0x00FFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "H81/H81P", ip); else if(0x012124 <= mx && mx <= 0x01FFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "H81/H81P", ip); else if(0x023F48 <= mx && mx <= 0x02FFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "H83", ip); else if(0x0D0000 <= mx && mx <= 0x0DFFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "X30", ip); else if(0x0E0000 <= mx && mx <= 0x0EFFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "IX100", ip); else if(0x0F0000 <= mx && mx <= 0x0FFFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "IX200", ip); else if(0x200000 <= mx && mx <= 0x20FFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "X20", ip); else if(0x210000 <= mx && mx <= 0x21FFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "HE30", ip); else if(0x220000 <= mx && mx <= 0x22FFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "WE20", ip); else if(0x230000 <= mx && mx <= 0x23FFFF ) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','%s','%s')", mac, "Zycoo", "CE20", ip); mx = 0; } /* else if(!strncmp(mac, "000b82", 6))//chao liu SELECT func_record_discover_phone_device('005544444444','zycoo','h83','192.168.10.12'); sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Grandstream", ip); else if(!strncmp(mac, "001565", 6))//yi lian sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Yealink", ip); else if(!strncmp(mac, "00268b", 6)) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Escene", ip); else if(!strncmp(mac, "0c1105", 6)) sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "AkuVox", ip); else if(!strncmp(mac, "001fc1", 6))//han long sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Htek", ip); else if(!strncmp(mac, "0c383e", 6))//fang wei sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Fanvil", ip); else if(!strncmp(mac, "000413", 6))//snom sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Snom", ip); else if(!strncmp(mac, "00304f", 6))//planet sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Planet", ip); else if(!strncmp(mac, "0021f2", 6))//Flyingvoice sprintf(sql, "SELECT func_record_discover_phone_device('%s','%s','','%s')", mac, "Flyingvoice", ip); */ //printf("%s\n",sql); if(strlen(sql) > 0){ printf("sql_insert cmd: %s \n", sql); if(mysql_real_query(conn_mysql, sql, strlen(sql))){ printf("Insert data faild :%s !\n",mysql_error(conn_mysql)); return -1; } // do { res = mysql_store_result( conn_mysql ); mysql_free_result(res); }while( !mysql_next_result( conn_mysql ) ); } bzero(buf,SIZE); i = 0;j = 0; } fclose(fp); mysql_close(conn_mysql); return 0; }