㈠ 如何獲取用戶真實訪問IP問題
1、如果伺服器如果沒有採用反向代理,而且客戶端沒有用正向代理的話,那麼可以獲取客戶端的真實IP地址request.getRemoteAddr()
2、如果伺服器如果沒有採用反向代理,而且客戶端有用正向代理的話,那麼通過request.getRemoteAddr()獲取客戶端的IP地址是客戶端 的代理伺服器的地址,並不是客戶端的真實地址,
3、如果客戶端使用的是多層代理的話,伺服器獲得的客戶端地址是客戶端的最外圍代理伺服器的地址如果伺服器如果採用反向代理伺服器,不管客戶端採用的是何種方式訪問伺服器。
//獲得客戶端真實IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
//獲得客戶端真實IP地址的方法二:
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
㈡ 伺服器如何獲取客戶端的IP地址,並與客戶端建立TCP連接
客戶端的IP自動獲取,關鍵要看客戶端的IP是由誰來分配的,如果都是有ISP提供的那麼伺服器利用IP去連接客戶端就不太可能。可以嘗試用下面兩種思路解決:
1、能否讓客戶機主動連接伺服器。
2、使用動態DNS。讓每個客戶機都申請一個動態域名,無論它的IP怎樣變,當改變以後都會到DNS伺服器進行注冊,然後伺服器使用主機的名字訪問客戶端。
㈢ 如何通過Socket獲得所有客戶端連接的IP地址
如果伺服器端要獲取客戶端ip的話:
//假設socket(),bind(),listen()函數已經完成addrlen
=
sizeof(client);connetfd
=
accept(listenfd,(struct
sockaddr
*)&client,&addrlen);那麼client.sin_port
就是客戶端的埠
client.sin_addr.s_addr
就是客戶端的ip。
這兩個都是以網路位元組序來保存的,如果要printf的話需要先轉化為主機位元組序
㈣ http伺服器怎樣獲取客戶端ip
客戶端
ip
地址是通過
cgi
變數
remote_addr
得到的,這個是
http
伺服器負責提供。
http
伺服器和客戶端瀏覽器之間存在
socket
連接,socket
連接信息包含了另一側的
ip
地址和埠。
當然,最終用戶如果是通過代理伺服器訪問怎麼辦呢?目前主流的
http
代理伺服器都支持在
http
報頭添加
x-forwarded-for
信息,這可以是一個列表,如果所有的代理
㈤ 服務端知道客戶端的內網ip嗎
服務端是不知道客戶端的內網ip的,只是知道外網IP。
如果你的伺服器在內網使用一般用的就是內網IP,如果伺服器不在你的內網中它的IP就是外網IP了。內網是客服端的IP地址,外網伺服器的IP地址。還有看網路的策略是怎麼規劃的。
服務端的許可權:
在定義服務端命令時,您可以根據您的業務需要來設置許可權,也就是可以調用該服務端命令的角色。創建完服務端命令時,在常規設置頁簽中,您可以設置許可權,也就是可以調用該服務端命令的角色。
㈥ 如何獲取客戶端和伺服器ip地址
您好,.X.XXX.XXX系列IP,而這個函數獲取的是區域網網關出口的IP地址,如果訪問者使用代理伺服器,將不獲取代理伺服器的IP,而是獲取訪問者網關的真實IP。如果將這個函數應用到限IP訪問的網頁中,別人即使通過限IP訪問段中的代理伺服器,也不能訪問該頁面。
下面提供一個函數:<?php
// 定義一個函數getIP()
function getIP(){global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");else$ip = "Unknow";
return $ip;}
// 使用方法:
echo getIP();?>
getenv("REMOTE_ADDR")用來取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 來讀取。
但是如果客戶端沒有通過代理伺服器來訪問,那麼用getenv("HTTP_X_FORWARDED_FOR") 取到的值將是空的。
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不為空(即客戶端使用代理伺服器的情況下),則變數$ip等於getenv("HTTP_X_FORWARDED_FOR") 取到的真實IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值為空(即沒有使用代理伺服器),則不會執行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");這一行語句。
這種情況下已經確認客戶端沒有使用代理伺服器,從而通過
else if(getenv("REMOTE_ADDR"))
這兩行語句獲得客戶端的IP地址也是真實的IP地址。
㈦ DHCP伺服器為客戶機分配IP地址的三種方式是什麼
簡單地說,可以通過DHCP伺服器獲得客戶機IP地址;第二種就是用客戶機所匯總的IP地址實現DHCP伺服器的獲取。第三種就是要把DHCP伺服器架構到核心交換機上實現IP地址分配。
㈧ 如何獲取客戶端IP和MAC地址,我獲取的是伺服器的,C
MAC地址是2層的東西,過了3層路由器後源MAC與目的MAC就會跟著所經過的路由器地址改變,如果在客戶端沒有任何響應進程將MAC地址信息放在應用層,理論上你不可能獲得。能非常容易的獲得ip地址、mac地址跟主機名應該是蠻危險的事情。你要真想問,你可以去黑客論壇找找吧。。。
㈨ 通常說的伺服器獲取客戶端電腦的IP指的是"IPv4地址",還是"DNS伺服器"地址
電腦是從DHCP伺服器獲得ip地址以及dns地址。
所以電腦不需要手動設置。
直接從伺服器獲得。
㈩ 伺服器端能獲取客戶ip地址,是利用什麼原理
應該是 OSI 七層模型當中網路層的 IP 協議,TCP 和 UDP 協議都只具備2位元組的源埠號(0~65536),源地址應該是由 IP 層提供的32位源IP地址來提供的,IIS應該是由此信息生成了 REMOTE_ADDR 這個ServerVariable。