void CH3CDlg::OnCbnSelchangeCombo1() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); GetMac(m_deviceNum); SaveDevice(); UpdateData(FALSE); }
std::string _GetHandle() { std::vector<unsigned char> mac; std::string res; if (GetMac(mac)) { res.assign(mac.begin(), mac.end()); wxLogDebug(_T("Found mac: %s"), TowxString(MacToString(mac)).c_str()); return std::string(mac.begin(), mac.end()); } return res; }
void GetRouterLocal(char *dev) { struct ifreq ifr; int fd; fd = CreateSocket(PF_INET, SOCK_DGRAM, IPPROTO_IP); memcpy(ifr.ifr_name, dev, IFNAMSIZ); src_mac = GetMac(fd, dev); src_ip = GetIp(fd, dev); netmask = GetNetmask(fd, dev); router_ip = GetRouterIp(); broadcast = GetBroadcast(fd, dev); }
std::string ID::GenerateId() { std::string id1,id2; std::string MAC = GetMac(); std::string SerialNumber = GetSerialNumber(); std::string MAC_hash =KeyGen::GetMD5(MAC); //std::string SerialNumber_hash = GetSHA256(SerialNumber); //std::cout << "key-part1: " << GetIDPart1(MAC_hash, MAC) << std::endl; id1 = GetIDPart1(MAC_hash, MAC); id2 = GetIDPart2(SerialNumber); std::string id = id1; id += id2; //std::cout << "ID:" << id << std::endl; _number= id; return id; }
int GetNMac(int n,char *mac) { LPHOSTENT ph; char hostname[128]; if(Sock2Startup()==0) { if(GetLocalIP(&ph,hostname)==0) { if(n< ph->h_length / (int)sizeof(int)) { if(GetMac(*((IPAddr *)ph->h_addr_list[n]),mac)==0) return 0; else return -4; } else return -3; } else return -1; } else return -2; }
BOOL CjobpostApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControls()。否则,将无法创建窗口。 InitCommonControls(); CWinApp::InitInstance(); AfxEnableControlContainer(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); gl_strMac = GetMac(); CString strAppPath = ""; GetAppPath(strAppPath); strAppPath += "set.ini"; char szTemp[2048] = {0}; CString strNode = "set"; ::GetPrivateProfileString(strNode,"username", "",(LPSTR)szTemp,2047, strAppPath); CString strUser = szTemp; memset(szTemp,0,2048); ::GetPrivateProfileString(strNode,"password", "",(LPSTR)szTemp,2047, strAppPath); CString strPwd = szTemp; int iRet = 0; if (strUser != "" && strPwd != "") { //进行验证 iRet = Reg(strUser,strPwd,gl_strMac.c_str()); } if (!iRet) { CRegDlg dlgReg; dlgReg.DoModal(); iRet = dlgReg.m_iRegSuc; if (!iRet) { return FALSE; } } CjobpostDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: 在此放置处理何时用“确定”来关闭 //对话框的代码 } else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用“取消”来关闭 //对话框的代码 } // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵。 return FALSE; }
int GetMac(char * ip,char * mac) { IPAddr ipAddr; ipAddr = inet_addr (ip); return GetMac(ipAddr,mac); }
int AtiendeCliente(int socket, struct sockaddr_in addr) { char buffer[BUFFERSIZE]; char aux[BUFFERSIZE]; int bytecount; int fin=0; int code=0; /* Código de salida por defecto */ time_t t; struct tm *tmp; while (!fin) { memset(buffer, 0, BUFFERSIZE); if((bytecount = recv(socket, buffer, BUFFERSIZE, 0))== -1) error(5, "No puedo recibir información"); //verificamos si lo que mandan es una ip y entonces la cambiamos por MAC if (strncmp(buffer, "IP", 2)==0) { printf("Se trata de in IPHONE\n"); std::string comando(buffer); comando=comando.substr(3); comando="weon:"+GetMac(comando); printf("El comando dice:"); printf(comando.c_str()); comando.copy(buffer,comando.length(),0); } /////////////////////////////////////// /* Evaluamos los comandos */ /* El sistema de gestión de comandos es muy rudimentario, pero nos vale */ /* Comando TIME - Da la hora */ //weon:mac if (strncmp(buffer, "weon", 4)==0) { t = time(NULL); tmp = localtime(&t); //separo la mac address std::string mac(buffer); mac=mac.substr(5,17); //registro el inicio de sesion, talvez solo registro todos memset(buffer, 0, 7); strftime(buffer, BUFFERSIZE, "echo '%H|", tmp); std::string txt(buffer); txt.append(mac); txt.append("' >> /etc/weon/InciosSesion.txt"); memset(buffer, 0, txt.length()); txt.copy(buffer,txt.length(),0); system(buffer); printf(buffer); //coloco la regla que logea //se registrara todo, esta linea no es necesaria txt="iptables -A FORWARD -p tcp --dport 443 -m mac --mac-source "; txt.append(mac); txt.append(" -m state --state NEW -j LOG --log-prefix 'weon:"); txt.append(mac); txt.append("' --log-level 4 "); memset(buffer, 0, BUFFERSIZE); txt.copy(buffer,txt.length(),0); system(buffer); printf(buffer); //coloco la regla que concede permisos //std::string txt; txt="/sbin/iptables -A FORWARD -m mac --mac-source "; txt.append(mac); txt.append(" -j ACCEPT"); memset(buffer, 0,BUFFERSIZE); txt.copy(buffer,txt.length(),0); system(buffer); printf(buffer); //regla que manda todo a squid txt="/sbin/iptables -t nat -I PREROUTING 2 -m mac --mac-source "; txt.append(mac); txt.append(" -p tcp --dport 80 -j DNAT --to-destination 192.168.1.250:3128"); memset(buffer, 0,BUFFERSIZE); txt.copy(buffer,txt.length(),0); system(buffer); printf(buffer); //esta regla deja saliro todo el trafico que no va al 80 txt="/sbin/iptables -t nat -I PREROUTING 3 -m mac --mac-source "; txt.append(mac); txt.append(" -j ACCEPT"); memset(buffer, 0,BUFFERSIZE); txt.copy(buffer,txt.length(),0); system(buffer); printf(buffer); //regreso mesage de concedido txt="OK:"+mac; memset(buffer, 0, BUFFERSIZE); txt.copy(buffer,txt.length(),0); fin=1; } else if (strncmp(buffer, "check", 5)==0) { std::string cmd(buffer); cmd=cmd.substr(6); memset(buffer,0,BUFFERSIZE); cmd.copy(buffer,cmd.length(),0); system(buffer); fin=1; } /* Comando DATE - Da la fecha */ else if (strncmp(buffer, "DATE", 4)==0) { memset(buffer, 0, BUFFERSIZE); t = time(NULL); tmp = localtime(&t); strftime(buffer, BUFFERSIZE, "Hoy es %d/%m/%Y\n", tmp); } /* Comando HOLA - Saluda y dice la IP */ else if (strncmp(buffer, "HOLA", 4)==0) { memset(buffer, 0, BUFFERSIZE); sprintf(buffer, "Hola %s, ¿cómo estás?\n", inet_ntoa(addr.sin_addr)); } /* Comando EXIT - Cierra la conexión actual */ else if (strncmp(buffer, "E", 1)==0) { memset(buffer, 0, BUFFERSIZE); sprintf(buffer, "Hasta luego. Vuelve pronto %s\n", inet_ntoa(addr.sin_addr)); fin=1; } /* Comando CERRAR - Cierra el servidor */ else if (strncmp(buffer, "Q",1)==0) { memset(buffer, 0, BUFFERSIZE); sprintf(buffer, "Adiós. Cierro el servidor\n"); fin=1; code=99; /* Salir del programa */ } else { sprintf(aux, "ECHO: %s\n", buffer); strcpy(buffer, aux); } if((bytecount = send(socket, buffer, strlen(buffer), 0))== -1) error(6, "No puedo enviar información"); } close(socket); return code; }
BOOL CH3CDlg::OnInitDialog() { CDialog::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 CreateMutex(NULL, true, _T("Huawei")); if(GetLastError() == ERROR_ALREADY_EXISTS) { MessageBoxEx(NULL, _T("已经有一个实例在运行!"), _T("H3C 802.1x"), MB_OK|MB_APPLMODAL|MB_ICONEXCLAMATION, 0x0804); Shell_NotifyIcon(NIM_DELETE,&tnd); PostQuitMessage(0); return FALSE; } // 读取信息 GetConfig(); PIP_ADAPTER_INFO pAdapter = NULL; DWORD dwRetVal = 0; pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); // Make an initial call to GetAdaptersInfo to get // the necessary size into the ulOutBufLen variable if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen); } int devCount = 0; if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) { pAdapter = pAdapterInfo; while (pAdapter) { string strDescri(pAdapter->Description); m_device.AddString(strtotstr(strDescri).c_str()); string strMac = GetMac(pAdapter); if(m_deviceUsed == strMac) m_deviceNum = devCount; pAdapter = pAdapter->Next; ++devCount; } } //else //{ // printf("Call to GetAdaptersInfo failed.\n"); //} if(m_deviceNum >= devCount) m_deviceNum = 0; GetMac(m_deviceNum); UpdateData(FALSE); CStrVector Paras = ParseCmdLine(); for(CStrVector::iterator ite = Paras.begin(); ite != Paras.end(); ++ite) if(!(*ite).Compare(_T("-mini"))) SetTimer(1, 200, NULL); SetCtrls(FALSE); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }