簡體   English   中英

如何使用cidr獲取客戶的IP地址

[英]How do I get client's ip address with cidr

我嘗試使用以下方法從HttpServletRequest對象獲取公共IP地址

httpServletRequest.getRemoteAddress();

它返回簡單的公共IP地址,例如123.21.21.12,但我需要的是132.21.21.12/8

我已經檢查過此方法如何僅使用javascript獲取客戶端的IP地址? 但是所有這些都提供不帶有CIDR位的簡單IP地址。

謝謝。

正如其他人在對您的問題的評論中所指出的那樣,無法僅從IP地址中提取子網掩碼信息,也沒有從服務器獲取此信息的可靠方法。 首先,您使用的是單個IP​​地址而不是整個子網,因此,正如其他人所說,正確的CIDR是/ 32。 其次,網絡掩碼是網絡層信息,並且IP路由的工作方式不需要提供目標IP地址以外的任何其他信息。

重要的是要知道到底要完成什么並將這些信息用於什么。 您是否僅需要滿足某些格式要求,還是確實需要子網掩碼? 無論如何,如果我們談論的是普通的Web客戶端/服務器,我會看到兩種不同的情況:

1)您需要有關客戶端網絡配置的確切信息

即使您能夠以編程方式獲取此類數據,我也不知道它會有用嗎。 由於IPv4地址的短缺以及ISP將地址分配給客戶的方式,大多數客戶端位於其進行NAT的家庭路由器之后,或者在某些情況下位於運營商級NAT之后。 擁有一堆都具有相同192.168.1.2/24地址的客戶端將是毫無意義的。

2)您需要公共信息(用於全局路由)來對客戶或與此相關的事物進行分組。

這意味着獲取公共IP地址(使用httpServletRequest.getRemoteAddress();獲得的IP地址)。 無法以100%的准確度獲取確切的子網,但是您可以從委托IP所屬范圍的RIR(區域Internet注冊表)數據庫中獲取路由對象。 LIR(具有地址塊的組織)有義務使用各種信息來更新該數據庫,其中之一就是創建這些路由對象。 為此,您可以使用真正簡單且易於實現的Whois協議 基本上,您只需要打開與端口43的TCP連接,發送包含所需信息的IP地址的命令並解析輸出即可。

對於您的示例(123.21.21.12),路由對象如下所示:

~ # whois -T route 123.21.21.12
% [whois.apnic.net]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

% Information related to '123.21.16.0/20AS45899'

route:          123.21.16.0/20
descr:          VietNam Post and Telecom Corporation (VNPT)
descr:          VNPT-AS-AP
country:        VN
origin:         AS45899
remarks:        mailto: noc@vnn.vn
notify:         hm-changed@vnnic.net.vn
mnt-by:         MAINT-VN-VNPT
changed:        hm-changed@vnnic.net.vn 20100810
source:         APNIC

% This query was served by the APNIC Whois Service version 1.69.1-APNICv1r0 (UNDEFINED)

我們可以看到該IP地址屬於AS45899(VNPT),並且路由對象為123.21.16.0/20,這為您提供了所需的CIDR。

如果我們從具有完整BGP表的路由器查詢該IP地址,請執行以下操作:

# show bgp ipv4 unicast 123.21.21.12          
BGP routing table entry for 123.21.16.0/20, version 71369881
Paths: (3 available, best #1, table default)

我們確實看到Whois數據庫確實已更新,並且IP屬於123.21.16.0/20路由。

請記住,這個/ 20可能是匯總路由,但這是您可以獲得的最佳路由。 那是路由信息,它是全球可用的,並且被世界各地的路由器用來路由流量。 ISP網絡內部如何使用/ 20前綴取決於其內部組織和策略,您無法檢查。 您也不應以此方式獲得小於/ 24的路由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM