获取本地的IP地址

Windows下2种方法:
1.
使用拨号上网的话,一般都有一个本地ip和一个外网ip,使用python可以很容易的得到这两个ip
使用gethostbyname和gethostbyname_ex两个函数可以实现

import socket
localIP 
= socket.gethostbyname(socket.gethostname())#得到本地ip
print "local ip:%s "%localIP

ipList 
= socket.gethostbyname_ex(socket.gethostname())
for i in ipList:
    
if i != localIP:
       
print "external IP:%s"%i

 

 2.

import socket

myname 
= socket.getfqdn(socket.gethostname())
myaddr 
= socket.gethostbyname(myname)

 

还有一种Linux下的方法可以用的是:

Uses the Linux SIOCGIFADDR ioctl to find the IP address associated with a network interface, given the name of that interface, e.g. "eth0". The address is returned as a string containing a dotted quad.

import socket
import fcntl
import struct

def get_ip_address(ifname):
    s 
= socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        
0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[
20:24])

 

 

>>> get_ip_address('lo')
'127.0.0.1'

>>> get_ip_address('eth0')
'38.113.228.130'

 

Java版本:

    private Set getAllLocalHostIP() throws UnknownHostException{
        Set result 
= new HashSet();
        InetAddress addr 
= InetAddress.getLocalHost();
        String hostName 
= addr.getHostName();
        
if(hostName.length() > 0){
            InetAddress[] addrs 
= InetAddress.getAllByName(hostName);
            
if(addrs.length > 0){
                
for(int i=0; i<addrs.length; i++){
                    result.add(addrs[i].getHostAddress());
                }
            }
        }
        
        result.add(
"127.0.0.1");
        
return result;        
    }

 

 

 

 

posted @ 2011-07-19 17:12  小楼  阅读(4303)  评论(0编辑  收藏  举报