专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

C# 取得内网IP、外网IP、客户端IP方法

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:10:30       共计:3620 浏览

前言


在 Windows Form Application 里对于取得 IP Address 有内网、外网两种 IP Address ,如果只需要取得内网 IP Address ,可以透过使用 IPHostEntry 类别取得,而外网的话就必须要发送一个 Request 到一个可以取得 IP Address 的网站后再分析 Response 的内容,这个网站可以自己做或者使用现成的,如 http://www.whatismyip.com.tw/ 。


另外,在使用 Socket 通讯的情况下,也有可能有需要知道前来连结的客户端的 IP Address 是什么,这时就可以使用 Socket.RemoteEndPoint 属性来取得远程 IP 地址和通讯端口编号,以下就列出范例代码看看该如何使用。


范例程序代码



/// <summary>

       /// 取得外网 IP Address

       /// </summary>

       /// <returns></returns>

       private string GetExtranetIPAddress()

       {

           HttpWebRequest request = HttpWebRequest.Create("http://www.whatismyip.com.tw") as HttpWebRequest;

           request.Method = "GET";

           request.ContentType = "application/x-www-form-urlencoded";

           request.UserAgent = "Mozilla/5.0";

           string ip = string.Empty;

           WebResponse response = request.GetResponse();

           using (StreamReader reader = new StreamReader(response.GetResponseStream()))

           {

               string result = reader.ReadToEnd();

               string pattern = @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}";

               ip = Regex.Match(result, pattern).ToString();

           }

           return ip; // result: 210.125.21.xxx

       }




/// <summary>

       /// 取得本机 IP Address

       /// </summary>

       /// <returns></returns>

       private List<string> GetHostIPAddress()

       {

           List<string> lstIPAddress = new List<string>();

           IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());

           foreach (IPAddress ipa in IpEntry.AddressList)

           {

               if (ipa.AddressFamily == AddressFamily.InterNetwork)

                   lstIPAddress.Add(ipa.ToString());

           }

           return lstIPAddress; // result: 192.168.1.17 ......

       }




private static string GetIP()

{

   string tempip = "";

   try

   {

       WebRequest wr = WebRequest.Create("http://www.ip138.com/ips138.asp");

       Stream s = wr.GetResponse().GetResponseStream();

       StreamReader sr = new StreamReader(s, Encoding.Default);

       string all = sr.ReadToEnd(); //读取网站的数据


       int start = all.IndexOf("您的IP地址是:[") + 9;

       int end = all.IndexOf("]", start);

       tempip = all.Substring(start, end - start);

       sr.Close();

       s.Close();

   }

   catch

   {

   }

   return tempip;

}




/// <summary>

/// 执行服务器监听

/// </summary>

public static void RunServer()

{


   // 建立X509凭证

   ServerCertificate = new X509Certificate(Certificate, "ssl");

   // 监听任何IP Address来的讯息

   listener = new TcpListener(System.Net.IPAddress.Any, 17170);

   // 开启监听

   listener.Start();


   while (IsRun)

   {

       TcpClient client = listener.AcceptTcpClient();


       ProcessClient(client);

   }

}


/// <summary>

/// 接收客户端讯息处理并回复

/// </summary>

/// <param name="pClient"></param>

private static void ProcessClient(TcpClient pClient)

{

   SslStream sslStream = new SslStream(pClient.GetStream(), true);


   // 取得连接者 IP 与 Port

   IPEndPoint point = pClient.Client.RemoteEndPoint as IPEndPoint;

   string ip = point.Address.ToString(); // result: 127.0.0.1

   string port = point.Port.ToString(); // result: 55236


   // do something...

}


复制代码




string tempIP =string.Empty;

if (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length >1)   

     tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();



版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:C# TCP/IP网络数据传输及实现 | ·下一条:C#攻克反爬虫之代理IP爬取

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有