linux中 python 如何获取本机ip

wenmx 2007-12-01 09:31:23
在windows中,socket.gethostbyname(socket.gethostname())可以实现
但是在linux中,获取的结果却是127.0.0.1,而不是配置的ip地址

有什么办法可以实现?
...全文
2530 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlalalal 2009-09-26
  • 打赏
  • 举报
回复
还有一种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.

Source: Text Source

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'

转自:http://blog.csdn.net/blade2001/archive/2009/03/10/3975389.aspx
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
不明LZ在说什么
wenmx 2008-01-24
  • 打赏
  • 举报
回复
谢谢各位,楼上的答案可用。
maplele20 2007-12-03
  • 打赏
  • 举报
回复
>>> ip = os.popen("/sbin/ifconfig | grep 'inet addr' | awk '{print $2}'").read()>>> ip = ip[ip.find(':')+1:ip.find('\n')]
>>> ip
'192.168.114.133'
>>>
iambic 2007-12-02
  • 打赏
  • 举报
回复
一个讨论:http://groups.google.com/group/comp.lang.python/browse_thread/thread/d931cdc326d7032b/3031b223108206bd
中间有一点有意思的代码可用:
>>> from socket import socket, SOCK_DGRAM, AF_INET
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> s.connect(('google.com', 0))
>>> s.getsockname()
('192.168.1.113', 43711)


另外两个相关库的库:
http://pypi.python.org/pypi/netifaces/0.3
http://www.google.com/codesearch?hl=en&q=+class+IfConfig+show:qb29leCQ7IU:wjsmn477sKk:0dc7V3lzLaI&sa=N&cd=1&ct=rc&cs_p=ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-4-stable/All/linkchecker-4.5.tgz&cs_f=lib/python2.4/site-packages/linkcheck/dns/ifconfig.py#first

wenmx 2007-12-01
  • 打赏
  • 举报
回复
Crazy_ing 的:
"ifconfig eth0 ¦grep inet ¦awk '{print $2} ' ")[1][5:][5:]
命令是不是语法有错?

再就是如何在python能把这个命令运行的结果赋值到一个变量?

谢谢!
Crazy_ing 2007-12-01
  • 打赏
  • 举报
回复
上面多了一个[5:]
Crazy_ing 2007-12-01
  • 打赏
  • 举报
回复
据说比较困难,可以用ifconfig命令然后取出
"ifconfig eth0|grep inet|awk '{print $2}'")[1][5:][5:]

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧