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;
}