LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1279|回复: 14

ifconfig等经典程序的输出格式会变化吗?

[复制链接]
发表于 2006-9-6 14:24:59 | 显示全部楼层 |阅读模式
我用python写了个读ifconfig的东西,输出mac和ipaddr,是根据现在ifconfig的输出格式写的。

老板说那样不行,确实,如果输出格式下一个版本中换掉了,确实程序就不行了,

可问题是……

它的输出会变吗?
发表于 2006-9-6 14:28:31 | 显示全部楼层
基本上,是不会。。。你都说了经典程序了嘛。:)
回复 支持 反对

使用道具 举报

发表于 2006-9-6 15:17:11 | 显示全部楼层
也许ifconfig会被代替,很可能被ip代替了。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-6 16:04:55 | 显示全部楼层
郁闷啊。

正在学正则表达了,用这个寻找……
回复 支持 反对

使用道具 举报

发表于 2006-9-6 17:45:12 | 显示全部楼层
ip:
ifconfig | sed -n 's/.*inet addr:\([^ ]*\).*/\1/p'

mac:
ifconfig | sed -n 's/.*HWaddr\(.*\)/\1/p'

btw:你依靠的是ifconfig,如果他格式变了,在你不知道如何变的情况下,可能写出来一个万能的程序么?
回复 支持 反对

使用道具 举报

发表于 2006-9-6 18:17:38 | 显示全部楼层
Post by kangkang
也许ifconfig会被代替,很可能被ip代替了。。
指 iproute2 吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-6 18:19:02 | 显示全部楼层
Thank you VERY much!

好好学习正则!
回复 支持 反对

使用道具 举报

发表于 2006-9-7 13:11:01 | 显示全部楼层
正则式才是王道
回复 支持 反对

使用道具 举报

发表于 2006-9-7 14:41:50 | 显示全部楼层
ifconfig就是调用的ioctl的,ioctl为系统调用,自己用c写一个嘛
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-7 14:53:00 | 显示全部楼层
恩,python写到一半,被卡住了……

  1. #!/usr/bin/python
  2. #Filename:ethIP.py

  3. from socket import *
  4. import IN
  5. import fcntl
  6. import struct

  7. def get_ip_addr(ifname):
  8.         "usage: get_ip_addr(<interface>)"
  9.        
  10.         sfd = socket(AF_INET, SOCK_STREAM)
  11.         binaryIP = fcntl.ioctl(sfd.fileno(),0x8915,struct.pack('25s',ifname))[20:24]        #SIOCGIFADDR --> 0x8915
  12.         return inet_ntoa(binaryIP)

  13. def get_hw_addr(ifname):
  14.         "usage: get_hw_addr(<interface>)"
  15.        
  16.         sfd = socket(AF_INET,SOCK_STREAM)
  17.         binaryHW = fcntl.ioctl(sfd.fileno(),0x8927,struct.pack('25s',ifname))[??:??]        #SIOCGIFHWADDR --> 0x8927
  18.         ???how to conver binary to xx:xx:xx::xx???
  19.         return binaryHW


  20. print get_ip_addr('eth0')
  21. print get_hw_addr('eth0')
复制代码


???部分不知道如何写。调试了半天。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表