1. 客服端和服務端建立TCP連接後,怎麼從服務端獲取客戶端的IP地址
Socket clientSock = ServerSocket.Accpet();
接受客戶端連接
DateTime connectTime = DateTime.Now;
連接一個客戶端後,當前時間就是連接時間。
(clientSock.RemoteEndPoint as IPEndPoint).IPAddress;
ip地址
(clientSock.RemoteEndPoint as IPEndPoint).Port;
埠號
2. 如何通過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的話需要先轉化為主機位元組序
3. 如何獲取客戶端IP,WEB伺服器IP
客戶端 IP 地址是通過 CGI 變數 REMOTE_ADDR 得到的,這個是 HTTP 伺服器負責提供。 HTTP 伺服器和客戶端瀏覽器之間存在 socket 連接,socket 連接信息包含了另一側的 IP 地址和埠。
當然,最終用戶如果是通過代理伺服器訪問怎麼辦呢?目前主流的 HTTP 代理伺服器都支持在 HTTP 報頭添加 X-Forwarded-For 信息,這可以是一個列表,如果所有的代理
4. 一台主機上網採用自動獲取IP地址的方式,如何簡要描述其獲取地址的過程及所採用協議工作方式
主機獲取地址的過程及所採用協議工作方式:
發現階段:即DHCP客戶機尋找DHCP伺服器的階段。DHCP客戶機以廣播的方式發送DHCP discover 發現信息來尋找DHCP伺服器(因為DHCP伺服器的IP地址對客戶機來說是未知的)。
即向255.255.255.255發送特定的廣播信息,網路上每一台安裝了TCP/IP協議的主機都會接收到這種廣播信息,但只有DHCP伺服器才會作出響應。
提供階段:即DHCP伺服器提供IP地址的階段。在網路中收到DHCP discover發現信息的DHCP伺服器都會作出響應,它從尚未出租的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機發送一個包含出租的IP地址和其他設置額DHCP offer提供信息。
選擇階段:DHCP客戶機選擇某台DHCP伺服器提供的IP地址的階段。 如果有多台DHCP伺服器向DHCP客戶機發來的DHCP offer,客戶機只接收第一個收到的DHCP offer,然後它以廣播的方式回答一個DHCP request請求信息。
該信息中包含它所選定的DHCP伺服器請求IP地址的內容。
之所以要以廣播的方式回答,是為了通知所有的DHCP伺服器,它將選擇某台DHCP伺服器所提供的IP地址。
總結如下:
DHCP伺服器向DHCP客戶機出租的IP地址一般都由一個租借期限,期滿後DHCP伺服器會收回出租的IP地址。如果DHCP客戶機要延長其IP租約,則必須更新其租約。DHCP客戶機啟動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP伺服器發送其更新租約的信息。
5. 如何獲取客戶端和伺服器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地址。
6. http伺服器怎樣獲取客戶端ip
客戶端
ip
地址是通過
cgi
變數
remote_addr
得到的,這個是
http
伺服器負責提供。
http
伺服器和客戶端瀏覽器之間存在
socket
連接,socket
連接信息包含了另一側的
ip
地址和埠。
當然,最終用戶如果是通過代理伺服器訪問怎麼辦呢?目前主流的
http
代理伺服器都支持在
http
報頭添加
x-forwarded-for
信息,這可以是一個列表,如果所有的代理
7. 伺服器如何獲取客戶端的IP地址,並與客戶端建立TCP連接
客戶端的IP自動獲取,關鍵要看客戶端的IP是由誰來分配的,如果都是有ISP提供的那麼伺服器利用IP去連接客戶端就不太可能。可以嘗試用下面兩種思路解決:
1、能否讓客戶機主動連接伺服器。
2、使用動態DNS。讓每個客戶機都申請一個動態域名,無論它的IP怎樣變,當改變以後都會到DNS伺服器進行注冊,然後伺服器使用主機的名字訪問客戶端。
8. 如何獲得客戶端的ip地址
如果你測試訪問的時候,使用的是 localhost 進行訪問的,那麼伺服器端獲得的也就是127.0.0.1,因為localhost是一個環路地址,特殊的.
如果你是通過你的ip地址進行訪問的,那麼獲得的IP地址就會是正確的了.
-------
要通過自己本地的IP進行訪問,在控制面板的網路連接里找到本地連接,查看它的屬性,並找到"詳細信息"按鈕,點擊後彈出的對話框中IPV4地址就是本地地址.
或打開命令行,輸入 ipconfig /all 即可找到本地地址.
在瀏覽器中通過這個IP地址訪問,就不會是127.0.0.1了.
9. java服務端如何獲得客戶端的ip
serversocket()不提供這個方法,但是server端獲取到的請求new serversocket()().accept()()返回的是一個socket()對象,也就是當前連接的信息,這裡麵包含有一個 getRemoteAddress方法。多看看API