C#获取路由器外网IP,MAC地址的实现代码
C#实现的获取路由器MAC地址,路由器外网地址。对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码。至于获取路由器的外网IP地址,可以不需要知道路由器web管理系统的用户名和密码,但是需要有一个代理页面获取客户端公网ip地址的,这样C#请求此页面即可获取到路由器公网ip地址。如
//getip.ashx
测试路由为水星MR804,水星MR808,都可以成功重启路由和获取到路由器MAC和外网IP地址
源代码
usingSystem.Text; usingSystem.Net; usingSystem.Text.RegularExpressions; usingSystem.IO; publicclassRouter { Encodinggb2312=Encoding.GetEncoding(936);//路由器的web管理系统默认编码为gb2312 ///<summary> ///使用HttpWebRequest对象发送请求 ///</summary> ///<paramname="url"></param> ///<paramname="encoding">编码</param> ///<paramname="cache">凭证</param> ///<returns></returns> privatestaticstringSendRequest(stringurl,Encodingencoding,CredentialCachecache) { HttpWebRequestrequest=(HttpWebRequest)HttpWebRequest.Create(url); if(cache!=null) { request.PreAuthenticate=true; request.Credentials=cache; } stringhtml=null; try { HttpWebResponseresponse=(HttpWebResponse)request.GetResponse(); StreamReadersrd=newStreamReader(response.GetResponseStream(),encoding); html=srd.ReadToEnd(); srd.Close(); response.Close(); } catch(Exceptionex){html="FALSE"+ex.Message;} returnhtml; } ///<summary> ///获取路由MAC和外网IP地址 ///</summary> ///<paramname="RouterIP">路由IP地址,就是网关地址了,默认192.168.1.1</param> ///<paramname="UserName">用户名</param> ///<paramname="Passowrd">密码</param> ///<returns></returns> privatestringLoadMACWanIP(stringRouterIP,stringUserName,stringPassowrd) { CredentialCachecache=newCredentialCache(); stringurl="http://"+RouterIP+"/userRpm/StatusRpm.htm"; cache.Add(newUri(url),"Basic",newNetworkCredential(UserName,Passowrd)); returnSendRequest(url,gb2312,cache); } }
MFC获取外网IP地址和MAC地址
ip地址获取:
CStringGetSystemIp(void) { CStringcsSource; CStringcsAddress; CStringcsIPAddress; csIPAddress.Format(_T("")); CInternetSessionmySession(NULL,0); CHttpFile*myHttpFile=NULL; csAddress=_T("http://iframe.ip138.com/ic.asp");//ip138网页http://www.ip138.com/ip2city.asp myHttpFile=(CHttpFile*)mySession.OpenURL(csAddress);//读取网络地址 while(myHttpFile->ReadString(csSource)) {//循环读取下载来的网页文本 //code转换 char*pStr=(char*)csSource.GetBuffer(csSource.GetLength());//取得str对象的原始字符串 intnBufferSize=MultiByteToWideChar(CP_UTF8,0,pStr,-1,NULL,0);//取得所需缓存的多少 wchar_t*pBuffer=(wchar_t*)malloc(nBufferSize*sizeof(wchar_t));//申请缓存空间 MultiByteToWideChar(CP_UTF8,0,pStr,-1,pBuffer,nBufferSize*sizeof(wchar_t));//转码 //MessageBox(pBuffer);//显示 csSource.Format(_T("%s"),pBuffer); free(pBuffer);//释放缓存 intbegin=0; begin=csSource.Find(_T("["),0); if(begin!=-1)//如果找到"[",则找"]"中括号内的文本则是你的外网ip { intend=csSource.Find(_T("]")); csIPAddress.Format(_T("%s"),csSource.Mid(begin+1,end-begin-1));//提取外网ip returncsIPAddress; } } returncsIPAddress; }
MAC地址获取:
CStringGetMacAddress(void) { //CStringstrIP,strGateWay,strSubnetMask; CStringstrMac; strMac.Format(_T("")); u_charpMac[6]; PIP_ADAPTER_INFOadp=NULL; ULONGuLong=0; //为适配器申请内存 ::GetAdaptersInfo(adp,&uLong); adp=(PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,uLong); //取得本地适配器结构信息 if(::GetAdaptersInfo(adp,&uLong)==ERROR_SUCCESS) { if(adp!=NULL) { //strMacAdd.Format("%s",adp->Address); memcpy(pMac,adp->Address,6); strMac.Format(_T("%02X-%02X-%02X-%02X-%02X-%02X"),pMac[0],pMac[1],pMac[2],pMac[3],pMac[4],pMac[5]); //strGateWay.Format(_T("%s"),adp->GatewayList.IpAddress.String);//网关 //strIP.Format(_T("%s"),adp->IpAddressList.IpAddress.String);//IP //strSubnetMask.Format(_T("%s"),adp->IpAddressList.IpMask.String);//子网掩码 //MessageBox(strMac); } } returnstrMac; }