| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1667 人关注过本帖
标题:[求助]问个问题:运行什么样代码会对系统有影响
只看楼主 加入收藏
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
这个好办~~~~~还有没有??




by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-09-03 19:01
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 

下面这段代码是通过socket获取网卡信息的,不过再linux下使用的


int main()
{
int nSocket, nLen, nAttrLen;
char szBuffer[4096];

struct
{
struct nlmsghdr nh;
struct ifinfomsg ifi;
}struReq;

struct sockaddr_nl struAddr;
struct nlmsghdr *pstruNL;
struct ifinfomsg *pstruIF;
struct rtattr *pstruAttr;
struct net_device_stats *pstruInfo;
struct ether_addr *pstruEther;


/*
* 创建一个PF_NETLINK的SOCKET,使用NETLINK_ROUTE协议
*/
nSocket = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
if (nSocket<0 )
{
fprintf( stderr, "创建SOCKET错误:%s\n",strerror(errno));
return -1;
}

/*
* 绑定地址
*/
memset(&struAddr,0,sizeof(struAddr));
struAddr.nl_family = AF_NETLINK;
struAddr.nl_pid = getpid();
struAddr.nl_groups = 0;

if(bind(nSocket, (struct sockaddr *)&struAddr,sizeof (struAddr)) < 0)
{
fprintf(stderr,"绑定SOCKET错误:%s\n", strerror(errno));
return -1;
}

/*
* 发送一个请求
*/
memset(&struReq,0,sizeof(struReq));
struReq.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struReq));
struReq.nh.nlmsg_type = RTM_GETLINK;
struReq.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
struReq.ifi.ifi_family = AF_UNSPEC;

memset(&struAddr,0,sizeof(struAddr));
struAddr.nl_family = AF_NETLINK;
struAddr.nl_pid =0;
struAddr.nl_groups =0;

if(sendto(nSocket, &struReq, struReq.nh.nlmsg_len,0,(struct sockaddr *)&struAddr,sizeof(struAddr)) <0)
{
fprintf(stderr,"发送数据错误:%s\n", strerror(errno));
return -1;
}

/*
* 循环接收数据,直到超时
*/
alarm(30);
memset(szBuffer,0,sizeof(szBuffer));
while((nLen = recv(nSocket, szBuffer, sizeof(szBuffer), 0)))
{
alarm(0);
pstruNL = (struct nlmsghdr *)szBuffer;

/*
* 判断是否继续有数据
*/
while(NLMSG_OK(pstruNL, nLen))
{
/*
* 数据已经获取完成
*/
if(pstruNL -> nlmsg_type == NLMSG_DONE)
break;

if(pstruNL -> nlmsg_type == NLMSG_ERROR)
{
/*
* 发生一个错误
*/
struct nlmsgerr *pstruError;
pstruError = (struct nlmsgerr *)NLMSG_DATA(pstruNL);
fprintf(stderr,"发生错误[%s]\n",strerror(-pstruError -> error));
break;
}

/*
* 下面通过宏获取数据
*/
pstruIF = NLMSG_DATA(pstruNL);
fprintf(stderr,"获取到设备[%d]信息\n", pstruIF -> ifi_index);
fprintf(stderr,"\t设备类型:");
switch(pstruIF -> ifi_type)
{
case ARPHRD_ETHER:
fprintf(stderr,"以太网\n");
break;
case ARPHRD_PPP:
fprintf(stderr,"PPP拨号\n");
break;
case ARPHRD_LOOPBACK:
fprintf(stderr,"环路设备\n");
break;
default :
fprintf(stderr,"未知\n");
break;
}

fprintf(stderr,"\t设备状态:");

if((pstruIF -> ifi_flags & IFF_UP )== IFF_UP)
fprintf(stderr, " UP");

if((pstruIF -> ifi_flags & IFF_BROADCAST) == IFF_BROADCAST)
fprintf(stderr," BROADCAST");

if((pstruIF -> ifi_flags & IFF_DEBUG) == IFF_DEBUG)
fprintf(stderr, " DEBUG");

if((pstruIF -> ifi_flags & IFF_LOOPBACK) == IFF_LOOPBACK)
fprintf(stderr," LOOPBACK");

if((pstruIF -> ifi_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT)
fprintf(stderr, " POINTOPOINT");

if((pstruIF -> ifi_flags & IFF_RUNNING) == IFF_RUNNING)
fprintf(stderr," RUNNING");

if((pstruIF -> ifi_flags & IFF_NOARP) == IFF_NOARP)
fprintf(stderr," NOARP");

if((pstruIF -> ifi_flags & IFF_PROMISC) == IFF_PROMISC)
fprintf(stderr, " PROMISC");

if((pstruIF -> ifi_flags & IFF_NOTRAILERS) == IFF_NOTRAILERS)
fprintf(stderr, " NOTRAILERS");

if((pstruIF -> ifi_flags & IFF_ALLMULTI) == IFF_ALLMULTI)
fprintf(stderr," ALLMULTI");

if((pstruIF -> ifi_flags & IFF_MASTER) == IFF_MASTER)
fprintf(stderr," MASTER");

if((pstruIF -> ifi_flags & IFF_SLAVE) == IFF_SLAVE)
fprintf(stderr," SLAVE");

if((pstruIF -> ifi_flags & IFF_MULTICAST) == IFF_MULTICAST)
fprintf(stderr, " MULTICAST");

if((pstruIF -> ifi_flags & IFF_PORTSEL) == IFF_PORTSEL)
fprintf(stderr, " SLAVE");

if((pstruIF -> ifi_flags & IFF_AUTOMEDIA) == IFF_AUTOMEDIA)
fprintf(stderr, " AUTOMEDIA");

if((pstruIF -> ifi_flags & IFF_DYNAMIC) == IFF_DYNAMIC)
fprintf(stderr," DYNAMIC");
fprintf(stderr,"\n");

/*
* 下面通过宏获取属性
*/
pstruAttr = IFLA_RTA(pstruIF);
nAttrLen = NLMSG_PAYLOAD(pstruNL,sizeof(struct ifinfomsg));

while(RTA_OK(pstruAttr, nAttrLen))
{
switch (pstruAttr->rta_type)
{
case IFLA_IFNAME:
fprintf(stderr,"\t设备名称:%s\n",(char *)RTA_DATA(pstruAttr));
break;
case IFLA_MTU:
fprintf(stderr,"\t设备MTU:%d\n",*(unsigned int *)RTA_DATA(pstruAttr));
break;
case IFLA_QDISC:
fprintf(stderr,"\t设备队列:%s\n",(char *)RTA_DATA(pstruAttr));
break;
case IFLA_ADDRESS:
if (pstruIF -> ifi_type == ARPHRD_ETHER)
{
pstruEther = (struct ether_addr *) RTA_DATA (pstruAttr);
fprintf(stderr,"\tMAC地址:%s\n",ether_ntoa(pstruEther));
}
break;
case IFLA_BROADCAST:
if(pstruIF -> ifi_type == ARPHRD_ETHER)
{
pstruEther = (struct ether_addr *)RTA_DATA(pstruAttr);
fprintf(stderr,"\t广播MAC地址:%s\n",ether_ntoa(pstruEther));
}
break ;
case IFLA_STATS:
pstruInfo = (struct net_device_stats *) RTA_DATA(pstruAttr);
fprintf(stderr,"\t接收信息:\n");
fprintf(stderr,"\t\t接收报文:%lu字节:%lu\n",pstruInfo -> rx_packets,pstruInfo -> rx_bytes);
fprintf(stderr, "\t\terrors:%lu dropped: %lu""multicast:%lu collisions:%lu\n",pstruInfo -> multicast, pstruInfo -> collisions);
fprintf(stderr,"\t\tlength:%lu over:%lu crc:%lu""frame:%lu fifo:%lu missed:%lu\n",pstruInfo -> rx_length_errors,pstruInfo -> rx_over_errors,pstruInfo -> rx_crc_errors,pstruInfo -> rx_frame_errors,pstruInfo -> rx_fifo_errors,pstruInfo -> rx_missed_errors);
fprintf(stderr,"\t发送信息:\n");
fprintf(stderr, "\t\t发送报文:%lu字节:%lu\n",pstruInfo -> tx_packets,pstruInfo -> tx_bytes);
fprintf(stderr, "\t\terrors:%lu dropped:%lu\n",pstruInfo -> tx_errors,pstruInfo ->tx_dropped);
fprintf(stderr, "\t\taborted:%lucarrier:%lufifo:%lu"" heartbeat:%luwindow:%lu\n",pstruInfo -> tx_aborted_errors,pstruInfo -> tx_carrier_errors,pstruInfo -> tx_fifo_errors,pstruInfo -> tx_heartbeat_errors,pstruInfo -> tx_window_errors);
break;
default :
break ;
}

/*
* 继续下一个属性
*/
pstruAttr = RTA_NEXT(pstruAttr, nAttrLen);
}

/*
* 继续下一个数据
*/
pstruNL = NLMSG_NEXT(pstruNL, nLen);
}

memset(szBuffer,0,sizeof(szBuffer));
alarm(30);
}
return 0;
}


编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-09-05 09:21
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 

下面的代码是通过socket修改网卡信息的,不过也是在linux下运行


int main()
{
struct {
struct nlmsghdr nh;
struct ifinfomsg if;
char attrbuf[512];
} req;
struct rtattr *rta;
unsigned int mtu = 1000;
int rtnetlink_sk = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);

memset(&req, 0, sizeof(req));
req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
req.nh.nlmsg_flags = NLM_F_REQUEST;
req.nh.nlmsg_type = RTML_NEWLINK;
req.if.ifi_family = AF_UNSPEC;
req.if.ifi_index = INTERFACE_INDEX;
req.if.ifi_change = 0xffffffff;
rta = (struct rtattr *)(((char *) &req) +
NLMSG_ALIGN(n->nlmsg_len));
rta->rta_type = IFLA_MTU;
rta->rta_len = sizeof(unsigned int);
req.n.nlmsg_len = NLMSG_ALIGN(req.n.nlmsg_len) +
RTA_LENGTH(sizeof(mtu));
memcpy(RTA_DATA(rta), &mtu, sizeof (mtu));
send(rtnetlink_sk, &req, req.n.nlmsg_len);

}


编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-09-05 09:26
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
不需要头文件就可以直接用吗?




by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-09-05 12:24
qqxxalam
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-11-28
收藏
得分:0 
楼主只会等答案不会找答案

2007-09-05 12:43
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
以下是引用雨中飞燕在2007-9-5 12:24:13的发言:
不需要头文件就可以直接用吗?



#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <linux/netdevice.h>
#include <net/if_arp.h>
#include <netinet/if_ether.h>
#include <netinet/ether.h>


编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-09-05 13:11
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
嗯嗯,谢谢楼上,<sys/socket.h>这个文件不是标准库里的吧,这就没什么问题了


by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-09-05 15:17
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
客气,不知道windows下使用是个什么情况

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-09-05 15:43
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
比较怕的是标准库里的remove和rename函数,我直接在头文件删掉了这两个函数了,嘿嘿



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-09-05 17:03
totohack
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-15
收藏
得分:0 
LZ想开发(win)系统防护软件吗?

不知道 写随机内存 会不会“对系统有影响”

2007-09-05 20:11
快速回复:[求助]问个问题:运行什么样代码会对系统有影响
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043797 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved