tomcat的伺服器ip
Ⅰ tomcat中localhost:8080界面,怎麼查看自己ip地址
你的環境是windows還是linux,windows打開自己的網路管理中心,查看網路適配器,如果是linux,就用命令,ifconfig -a 查看IP地址。
Ⅱ 請問為什麼下面看到的tomcat地址是0.0.0.0:8080
127.0.0.1是保留IP,無論你的外部IP是什麼系統都保留這Ip識別,
0.0.0.0應該是做為動態IP用,因為我發現上網後它會被外部ip替換
INADDR_ANY就是指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址,或「所有地址」、「任意地址」。 一般來說,在各個系統中均定義成為0值。
例如MontiVista Linux中在/usr/include/netinet/in.h定義為:
/* Address to accept any incoming messages. */
#define INADDR_ANY ((in_addr_t) 0x00000000)
一般情況下,如果你要建立網路伺服器應用程序,則你要通知伺服器操作系統:請在某地址 xxx.xxx.xxx.xxx上的某埠 yyyy上進行偵聽,並且把偵聽到的數據包發送給我。這個過程,你是通過bind()系統調用完成的。——也就是說,你的程序要綁定伺服器的某地址,或者說:把伺服器的某地址上的某埠占為已用。伺服器操作系統可以給你這個指定的地址,也可以不給你。
如果你的伺服器有多個網卡(每個網卡上有不同的IP地址),而你的服務(不管是在udp埠上偵聽,還是在tcp埠上偵聽),出於某種原因:可能是你的伺服器操作系統可能隨時增減IP地址,也有可能是為了省去確定伺服器上有什麼網路埠(網卡)的麻煩 —— 可以要在調用bind()的時候,告訴操作系統:「我需要在 yyyy 埠上偵聽,所以發送到伺服器的這個埠,不管是哪個網卡/哪個IP地址接收到的數據,都是我處理的。」這時候,伺服器程序則在0.0.0.0這個地址上進行偵聽。例如:
Proto Recv-Q Send-Q Local Address Foreign Address (state)
……
udp4 0 0 *.7913 *.*
udp4 0 0 *.7911 *.*
tcp4 0 0 *.ftp *.* LISTEN
……
……
以上這些是網路偵聽的情況,其中Local Address 為 「*.ftp」、「*.7911」等,代表了服務程序綁定了伺服器的所有網卡。
好了,你明白了偵聽INADDR_ANY是什麼意思了,那麼,我的伺服器有N個IP地址,會不會收到重復的數據包?收到數據包後,是不是會重復回復客戶端呢?
答案是:不會收到重復的數據包,也不會重復發送數據。
為什麼呢?因為路由的關系,從客戶端來的IP包只可能到達其中一個網卡。同時在伺服器進程發送數據時,操作系統根據自身維護著的路由表,決定IP數據包應該c從哪一個outbound的gateway向目標端發送。根據gateway選擇的不同,也就決定了從哪一個網卡/哪個IP地址發送。
為什麼不會接收到重復的數據包呢?
答:因為客戶端只向你的伺服器上的唯一一個IP地址發送數據了。
為什麼不會重復發送數據包呢?
答:因為發送數據包的路由(路徑)是唯一的。如果伺服器不知道在發送數據的時候應該向哪個地址發送數據,那麼數據就會被發送到「默認網關」上。
如何選擇發送數據的路徑呢?
答:依照路由表的要求發送。
如果路由表的記錄有重復/有沖突呢,這時候如何選擇路徑呢?
答:路由表記錄有優先順序別。一般來說,Windows操作系統的路由表記錄,如果是重復的話,以後來加入的記錄為准,而某些操作系統,象linux/FreeBSD是不允許加入重復的路由表記錄的;
如果是專用的路由器,有路由選擇演算法,一般來說,到達網路上的某一點的路徑是可以有很多條的。路由選擇演算法可以確定「最好的一條路徑」,這條路徑要麼是延時最小的,要麼是通訊費用最低的,要麼是帶寬最高的,要麼是跳點最小的——究竟是如何選擇,就看路由器的管理員如何配置了。
對於客戶端如果綁定INADDR_ANY,情況類似。對於TCP而言,在connect()系統調用時將其綁頂到一具體的IP地址。選擇的依據是該地址所在子網到目標地址是可達的(reachable). 這時通過getsockname()系統調用就能得知具體使用哪一個地址。對於UDP而言, 情況比較特殊。即使使用connect()系統調用也不會綁定到一具體地址。這是因為對UDP使用connect()並不會真正向目標地址發送任何建立連接的數據,也不會驗證到目標地址的可達性。它只是將目標地址的信息記錄在內部的socket數據結構之中,共以後使用。只有當調用sendto()/send()時,由系統內核根據路由表決定由哪一個地址(網卡)發送UDP packet.
P.S.
-----------------------------------------------------------------------------
在IP層中有一個路由表:
在MSDOS窗口可以運行命令:netstat -r
來顯示路由表。根據路由表的條目從指定的網卡發送數據。
ARP緩存用:arp -a
來顯示。
通常乙太網幀的目的MAC地址,是下一跳的MAC地址。
Ⅲ 怎麼用Tomcat實現IP限制訪問
Tomcat供了兩個參數供配置:RemoteHostValve 和RemoteAddrValve,前者用於限制主機名,後者用於限制IP地址。通過配置這兩個參數,可以過濾來自請求的主機或IP地址,並允許或拒絕哪些主機/IP。
全局設置,對Tomcat下所有應用生效:
server.xml中添加下面一行,重啟伺服器即可:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
此行放在</Host>之前。例:
1,只允許192.168.1.10訪問:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10" deny=""/>
2,只允許192.168.1.*網段訪問:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
3,只允許192.168.1.10、192.168.1.30訪問:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30" deny=""/>
4,根據主機名進行限制:
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="abc.com" deny=""/>局部設置,僅對具體的應用生效,根據項目配置情況進行設置:
1)使用conf目錄下xml文件進行配置${tomcat_root}confproj_1.xml
2)直接在server.xml中進行設置${tomcat_root}confserver.xml
在上述文件對應項目的</Context>前增加下面一行:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>特別需求:測試版本不想提供別人訪問,打開tomcat6confserver.xml文件,如果是要限制整個站點別人不能訪問,則要將
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*,192.168.2.*,*.mysite.com" deny=""/>
加入到<HOST></HOST>標簽中,如果是要限制某個站點不能被訪問,則要加入到<Context>裡面就可以。
<Context path="/myweb" reloadable="true" docBase="E: omcat6webappsmyweb">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.13.110,192.168.1.*,220.250.13.21" deny=""/>
< /Context>
RemoteHostValve根據主機名進行限制:
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="tmachine1" deny=""/>
修改文件:
tomcat/conf/server.xml
通過tomcat限制ip訪問。