1. 程式人生 > >獲得客戶端IP地址和IPV6簡單介紹

獲得客戶端IP地址和IPV6簡單介紹

今天查詢資料庫的表資料時發現有些儲存的IP地址是 ::1,查看了一下原始程式碼是使用Request . ServerVariables [ "REMOTE_ADDR" ]獲得的客戶端IP地址,::1是使用IP v6 的地址格式表示的是回送地址,即本機地址(127.0.0.1)的 ipv6格式;

順便找了一篇Ipv6的簡單介紹:

IPv6的地址格式簡介

  IPv6是“Internet Protocol Version 6”的縮寫,它是IETF設計的用於替代現行版本IP協議-IPv4-的下一代IP協議。

  基於對效率、功能、靈活性和應用性等多個方面因素的綜合考慮比較, IETF 決定在 IPv6 中採用 128 位固定長度的地址方案。

  IPv6 地址的表示形式:

  用文字方式表示的 IPv6 地址有三種規範的形式:

  1. 優先選用的形式是 X:X:X:X:X:X:X:X ,其中 X 是 1 個 16 位地址段的十六進位制值。例如:

  FEDC:BA98:7654:4210:FEDC:BA98:7654:3210

  2001:0:0:0:0:8:800: 201C : 417A

  每一組數值前面的 0 可以省略。如 0008 寫成 8

  2. 在分配某種形式的 IPv6 地址時,會發生包含長串 0 位的地址。為了簡化包含 0 位地址的書寫,可以使用 “::” 符號簡化多個 0 位的 16 位組。 “::” 符號在一個地址中只能出現一次。該符號也可以用來壓縮地址中前部和尾部的 0 。舉例如下:

  FF01:0:0:0:0:0:0:101 多點傳送地址

  0:0:0:0:0:0:0:1 回送地址

  0:0:0:0:0:0:0:0 未指定地址

  可用下面的壓縮形式表示:

  FF01::101 多點傳送地址

  ::1 回送地址

  :: 未指定地址

  3. 在涉及 IPv4 和 IPv6 節點混合的這樣一個節點環境的時候,有時需要採用另一種表達方式,即 X:X:X:X:X:X:D.D.D.D ,其中 X 是地址中 1 個高階 16 位段的十六進位制值, D 是地址中低階 8 位欄位的十進位制值(按照 IPv4 標準表示)。例如:下面兩種嵌入 IPv4 地址的 IPv6 地址。

  0:0:0:0:0:0:202.204.112.79 嵌入 IPv4 地址的 IPv6 地址

  0:0:0:0:0:FFFF:202.201.112.10 嵌入 IPv4 地址的 IPv6 地址

  寫成壓縮形式為:

  ::202.204.112.68

  ::FFFF.202.204.112.13

  同時 IPv6 的地址按定址方式和功能的不同,又可以分為 3 中基本型別。

  1.單播地址( Unicast )

  用來標識一個單介面。傳送給一個單播地址的包傳遞到由該地址標識的介面上。

  2. 任意點播地址( Anycast )

  一般分配給屬於不同節點的多個介面。傳送給一個任意點播地址的包傳送到該地址標識的、根據選路協議距離度量最近的一個介面上。

  3. 組播地址( Multicast )

  一般用來標識不同節點的一組介面,傳送給一個組播地址的包傳送到該地址所標識的所有介面上。

  IPv6 中沒有廣播地址,它的功能正在被組播地址所代替。

  在 IPv6 地址格式中,任何全“ 0 ”和“ 1 ”的欄位都是合法值。特別是字首可以包含“ 0 ”值欄位或以“ 0 ”為終結。其中“ ::1 ”回返地址,具有一個目的地址為回返地址的包不應傳送出單節點之外, IPv6 路由器也不會轉發這樣的包;“ :: (即全 0 )”為未指定地址。當移動節點返回家鄉鏈路時,用這個未指定地址作為源地址來發送鄰居請求獲得家鄉代理的鏈路層地址。

  所有型別的 IPv6 地址都被分配到介面,而不是節點。一個 IPv6 單播地址屬於單個介面,即屬於單個節點。而具有多個介面的節點,則可以有多個單播地址,其中任何一個都可以用作該節點的識別符號,至少有一個鏈路本地地址。

也有人使用 以下程式碼獲得客戶端IP地址

        string szRemoteAddr = Request.ServerVariables["REMOTE_ADDR"];
        string szXForwardedFor = Request.ServerVariables["X_FORWARDED_FOR"];
        string szIP = "";
if (Request.ServerVariables["HTTP_VIA"]==null) { szIP = szRemoteAddr; } else
{
szIP = szXForwardedFor; // 使用代理
if (szIP.IndexOf(",") > 0)
{
string [] arIPs = szIP.Split(','); // "," 真實地址和代理之間的分割
foreach (string item in arIPs)
{
if (!isIPAddresss(item))
{
return item;
}
}
}
}
return szIP;


但這個方法可以被偽造的
HTTP頭X-Forwarded-For 欺騙,所以還是使用 Request .ServerVariables [ "REMOTE_ADDR" ]吧

相關推薦

獲得客戶IP地址IPV6簡單介紹

今天查詢資料庫的表資料時發現有些儲存的IP地址是 ::1,查看了一下原始程式碼是使用Request . ServerVariables [ "REMOTE_ADDR" ]獲得的客戶端IP地址,::1是使用IP v6 的地址格式表示的是回送地址,即本機地址(127.0.0.1)

jquery 獲取客戶ip地址 地區位置

搜狐IP地址查詢介面(預設GBK):http://pv.sohu.com/cityjson 搜狐IP地址查詢介面(可設定編碼):http://pv.sohu.com/cityjson?ie=utf-8 使用搜狐介面demo: <p id="ip"></p> <

java伺服器獲得客戶IP地址

伺服器獲得客戶端IP地址 public static final String getIpAddress(HttpServletRequest request) { // 獲取請求主機IP地址,如果通過代理進來,則透過防火牆獲取真實IP地址 String ip

如何在ASP.NET中獲得客戶IP地址

       當客戶端向伺服器端發出HTTP請求時,可以通過HTTP請求獲得客戶端資訊。ASP.NET中Request物件是HTTPRequest類的例項,用來表示特定HTTP請求的值和屬性,其中包括所有URL引數和客戶端所傳送的資訊,該物件的常用屬性如下:     App

JS獲取客戶IP地址、MAC主機名的7個方法彙總

這篇文章主要介紹了JS獲取客戶端IP地址、MAC和主機名的7個方法彙總,JS本身是不支援獲取IP地址等資訊的,本文通過其它方法實現,需要的朋友可以參考下 今天在搞JS(javascript)獲取客戶端IP的小程式,上網搜了下,好多在現在的系統和瀏覽器中的都無效,很無奈,在C

獲取客戶ip地址方法通過curl在命令列提交post資料到伺服器

獲取客戶端ip地址方法 public String getIpAddress(HttpServletRequest request) {      String ip = request.getHeader("x-forwarded-for");      if(ip ==

nginx反向代理後web服務器記錄客戶ip地址

spa gin nginx反向代理 lan form https 記錄 客戶端訪問 use nginx在做反向代理的時候,後端的nginx web服務器log中記錄的地址都是反向代理服務器的地址,無法查看客戶端訪問的真實ip。 在反向代理服務器的nginx.conf配置文件

PHP獲取客戶IP地址,服務器IP地址

客戶端 get sse spa gets static p地址 tip sta ============================================獲取客戶端IP==============================================

獲取客戶IP地址

type 數字 fun xpl func ram server ip地址 p地址 /** * 獲取客戶端IP地址 * @param integer $type 返回類型 0 返回IP地址 1 返回IPV4地址數字 * @param boole

PHP 獲取客戶 IP 地址

先來了解一個變數的含義: $_SERVER['REMOTE_ADDR']:瀏覽當前頁面的使用者計算機的ip地址 $_SERVER['HTTP_CLIENT_IP']:客戶端的ip $_SERVER['HTTP_X_FORWARDED_FOR']:瀏覽當前頁面的使用者計算機的閘道器

獲取nginx客戶IP地址 Java request獲取客戶ip,各種apach,nginx等代理後依然正確

Java request獲取客戶端ip,各種apach,nginx等代理後依然正確 2017年02月22日 17:15:15 閱讀數:3268 在JSP,Java裡,獲取客戶端的IP地址的方法是:request.getRem

在ASP.NET Core 2.x中獲取客戶IP地址

一、前言 大家也知道服務端請求時我們獲取的IP地址是包含在請求頭中,因此這也大大便利了IP的獲取。 在ASP.NET中,可以通過以下方式獲取客戶端的IP地址。 HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

php獲取客戶ip地址或者伺服器ip地址

1.$_SERVER['REMOTE_ADDR'] 客戶端IP,有可能是使用者的IP,也可能是代理的IP。 2.$_SERVER['HTTP_CLIENT_IP'] 代理端的IP,可能存在可偽造。 3.$_SERVER['HTTP_X_FORWARDER_FOR'] 使用者是在哪個IP使用的代理,可

IE瀏覽器通過ActiveX方式獲取客戶IP地址

描述: 最近遇到一個需求,要進行日誌記錄,其中包含了IE瀏覽器客戶端IP地址的記錄。在嘗試了從request中獲取IP地址後,在沒有出現代理IP的情況下,可以正常獲取。即:區域網下,可以收集客戶端IP成功。但一旦出現代理IP的情況,就獲取不到我們正確的IP地址了。 分析: 方式一:從request中取I

java獲取客戶ip地址

public static String getIp2(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if(StringUtils.isNotEmpty(ip) && !"unKn

PHP 獲取客戶ip地址

一、如果沒有使用代理伺服器,   REMOTE_ADDR = 客戶端IP    HTTP_X_FORWARDED_FOR = 沒數值或不顯示   $ip = $_SERVER['REMOTE_ADDR']; 二、使用透明代理,   REMOTE_ADDR = 最後

在ASP.NET Core中獲取客戶IP地址

原文: 在ASP.NET Core中獲取客戶端IP地址 隨著ASP.NET的發展,有不同的方式從請求中訪問客戶端IP地址。WebForms和MVC Web應用程式只是訪問當前HTTP上下文的請求。   var ip = HttpContext.Current.Request.UserHo

客戶TCP時間獲取以及實現服務獲取客戶IP地址

這一次的問題主要是通過accept函式生成描述字,實現客戶端與伺服器的連線。 #include int accept(int sockfd, struct sockaddr *cliaddr, so

ASP.NET獲取客戶IP地址相關方法

 因為要在專案中取到客戶端IP,在網上搜了下相關資料,找到一些方法,因為資料很多,經過比較對比後總結出來的,在下面列舉出來,方便以後查閱之用: 通常我們都通過下面的程式碼獲得IP: ①string ip =System.Web.HttpContext.Current.

Java獲取訪問使用者的客戶IP地址(適用於公網與區域網)

  /** * 獲取Ip地址,多級反向代理 * @param request * @return */ public static String getIpaddr(HttpServletRequest request){ String ipAddress = request.ge