python 检测 网络物理连接

chenbin200818 2011-03-30 03:59:18
用c语言实现为

bool CSettings::check_linked()
{
#define LINKTEST_GLINK 0x0000000a
struct linktest_value
{
unsigned int cmd;
unsigned int data;
};
int sd = -1;
char* dev_name = "eth0";
// printf("<---<hgx> network name : %s \n",dev_name);
struct ifreq ifr;
struct linktest_value edata;
memset(&edata,0,sizeof(struct linktest_value));

sd = socket(AF_INET, SOCK_STREAM, 0);
if (sd < 0)
{
printf("[gxh:%s]get network status: open socket error\n",__FUNCTION__);
return false;
}
edata.cmd = LINKTEST_GLINK;
strncpy(ifr.ifr_name, dev_name, sizeof(ifr.ifr_name)-1);
ifr.ifr_data = (char *) &edata;

if (ioctl(sd, SIOCETHTOOL, &ifr) == -1)
{
printf("[gxh:%s]ETHTOOL_GLINK failed: %s\n",__FUNCTION__, strerror(errno));
::close(sd);
return false;
}
if(edata.data)
{
::close(sd);
return true;
}
::close(sd);
return false;
}

请问 用 python 如何实现该函数, 特别是 ioctl那块, 我对这个不熟悉
...全文
450 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenbin200818 2011-11-22
  • 打赏
  • 举报
回复
linux系统像 ubuntu fedora 都自带网络连接软件,都能自动设置连接wifi功能, 如果没找到,你去相应的软件仓库找找
xsmabbs 2011-11-11
  • 打赏
  • 举报
回复
请问楼主我若要一个实现linux系统下自动连接wifi的程序怎么写?办公室有三个wifi但信号都经常掉,密码都是一样的,我想用一个简单的程序实现自动连接一个wifi,若一个掉线,自动连接到另一个
chenbin200818 2011-04-01
  • 打赏
  • 举报
回复
我已经实现了
发代码给大家看看


def check_linked():
"""check hw(eth0) net physics conection"""

ifname = "eth0"
buff = array.array('i', [0x0000000a, 0x00000000])
addr, length = buff.buffer_info()
arg = struct.pack("Pi", addr, length)
data = (ifname + '\0'*16)[:16] + arg

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
SIOCETHTOOL = 0x8946
try:
fcntl.ioctl(sock.fileno(), SIOCETHTOOL, data)
except IOError, e:
print "check eth0 lined failed , and error is ",str(e)
sock.close()
return False

sock.close()

return bool(buff.tolist()[1])
notax 2011-03-31
  • 打赏
  • 举报
回复

http://carloscosta.org/2008/10/14/ethernet-link-status-with-python/

试试
iambic 2011-03-31
  • 打赏
  • 举报
回复
直接google你要解决的问题。非要把一段代码转换成另一种语言才能解决问题是死脑筋。
mrshelly 2011-03-31
  • 打赏
  • 举报
回复
你要循环调用的是吧...

python 一样的循环调用..

然后 在里面 尝试建立网络连接... 如果连接失败(捕获错误即可), 则返回网络连接出问题...

同C没有啥区别
chenbin200818 2011-03-31
  • 打赏
  • 举报
回复
有一种办法是 用python 调用 c模块 ,但我不想这么处理, 只想重写这块, 但是 调用 ioctl函数 第三个参数真的不止该怎么使用, google中没找着
chenbin200818 2011-03-30
  • 打赏
  • 举报
回复
该代码 功能是 插拔网线 能立即检测到,
我想用python 重现实现该功能, 但是 ioctl第三个参数 我不知该怎么处理

37,719

社区成员

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

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