好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#获取路由器外网IP,MAC地址的实现代码

C#实现的获取路由器MAC地址,路由器外网地址。对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码。至于获取路由器的外网IP地址,可以不需要知道路由器web管理系统的用户名和密码,但是需要有一个代理页面获取客户端公网ip地址的,这样C#请求此页面即可获取到路由器公网ip地址。如

//getip.ashx

测试路由为水星 MR804,水星 MR808,都可以成功重启路由和获取到路由器MAC和外网IP地址

源代码

?

using System.Text;

using System.Net;

using System.Text.RegularExpressions;

using System.IO;

public class Router

{

   Encoding gb2312 = Encoding.GetEncoding(936); //路由器的web管理系统默认编码为gb2312

   /// <summary>

   /// 使用HttpWebRequest对象发送请求

   /// </summary>

   /// <param name="url"></param>

   /// <param name="encoding">编码</param>

   /// <param name="cache">凭证</param>

   /// <returns></returns>

   private static string SendRequest( string url, Encoding encoding,CredentialCache cache)

   {

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

    if (cache != null )

    {

     request.PreAuthenticate = true ;

     request.Credentials = cache;

    }

    string html = null ;

    try

    {

     HttpWebResponse response = (HttpWebResponse)request.GetResponse();

     StreamReader srd = new StreamReader(response.GetResponseStream(), encoding);

     html = srd.ReadToEnd();

     srd.Close();

     response.Close();

    }

    catch (Exception ex) { html = "FALSE" + ex.Message; }

    return html;

   }

   /// <summary>

   /// 获取路由MAC和外网IP地址

   /// </summary>

   /// <param name="RouterIP">路由IP地址,就是网关地址了,默认192.168.1.1</param>

   /// <param name="UserName">用户名</param>

   /// <param name="Passowrd">密码</param>

   /// <returns></returns>

   private string LoadMACWanIP( string RouterIP, string UserName, string Passowrd)

   {

    CredentialCache cache = new CredentialCache();

    string url = "http://" + RouterIP + "/userRpm/StatusRpm.htm" ;

    cache.Add( new Uri(url), "Basic" , new NetworkCredential(UserName, Passowrd));

    return SendRequest(url, gb2312, cache);

   }

}

MFC 获取外网IP地址和MAC地址

ip地址获取:

?

CString GetSystemIp( void )

{

  CString csSource;

  CString csAddress;

  CString csIPAddress;

  csIPAddress.Format(_T( " " ));

  CInternetSession mySession(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对象的原始字符串

   int nBufferSize = 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); //释放缓存

 

   int begin=0;

   begin=csSource.Find(_T( "[" ),0);

   if (begin!=-1) //如果找到"[", 则找"]" 中括号内的文本则是 你的外网ip

   {

    int end=csSource.Find(_T( "]" ));

    csIPAddress.Format(_T( "%s" ),csSource.Mid(begin+1,end-begin-1)); //提取外网ip

    return csIPAddress;

   }

  }

  return csIPAddress;

}

MAC地址获取:

?

CString GetMacAddress( void )

{

  //CString strIP,strGateWay,strSubnetMask;

  CString strMac;

  strMac.Format(_T( "" ));

  u_char pMac[6];

  PIP_ADAPTER_INFO adp = NULL;

  ULONG uLong=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);

   }

  }

  return strMac;

}

dy("nrwz");

查看更多关于C#获取路由器外网IP,MAC地址的实现代码的详细内容...

  阅读:54次