http://www.linuxidc.com/Linux/2007-12/9623p3.htm
These were writed and collected by kf701,
you can use and modify them but NO WARRANTY.
Contact with me : kf_701@21cn.com
程序1:检测接口的 inet_addr,netmask,broad_addr
static void usage(){
printf("usage : ipconfig interface /n");
exit(0);
}
int main(int argc,char **argv)
{
struct sockaddr_in *addr;
struct ifreq ifr;
char *name,*address;
int sockfd;
if(argc != 2)
usage();
else
name = argv[1];
sockfd = socket(AF_INET,SOCK_DGRAM,0);
strncpy(ifr.ifr_name,name,IFNAMSIZ-1);
if(ioctl(sockfd,SIOCGIFADDR,&ifr) == -1)
perror("ioctl error"),exit(1);
addr = (struct sockaddr_in *)&(ifr.ifr_addr);
address = inet_ntoa(addr->sin_addr);
printf("inet addr: %s ",address);
if(ioctl(sockfd,SIOCGIFBRDADDR,&ifr) == -1)
perror("ioctl error"),exit(1);
addr = (struct sockaddr_in *)&ifr.ifr_broadaddr;
address = inet_ntoa(addr->sin_addr);
printf("broad addr: %s ",address);
if(ioctl(sockfd,SIOCGIFNETMASK,&ifr) == -1)
perror("ioctl error"),exit(1);
addr = (struct sockaddr_in *)&ifr.ifr_addr;
address = inet_ntoa(addr->sin_addr);
printf("inet mask: %s ",address);
printf("/n");
exit(0);
}
程序2:检查接口的物理连接是否正常
程序3:更简单一点测试物理连接
static
void
usage(const char * pname)
{
fprintf(stderr, "usage: %s <device>/n", pname);
fprintf(stderr, "returns: /n");
fprintf(stderr, "/t 0: link detected/n");
fprintf(stderr, "/t%d: %s/n", ENODEV, strerror(ENODEV));
fprintf(stderr, "/t%d: %s/n", ENONET, strerror(ENONET));
fprintf(stderr, "/t%d: %s/n", EOPNOTSUPP, strerror(EOPNOTSUPP));
exit(EXIT_FAILURE);
}
static
int
linktest(const char * devname)
{
struct ifreq ifr;
struct linktest_value edata;
int fd;
/* setup our control structures. */
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, devname);
/* open control socket. */
fd=socket(AF_INET, SOCK_DGRAM, 0);
if(fd < 0 ) {
return -ECOMM;
}
errno=0;
edata.cmd = LINKTEST_GLINK;
ifr.ifr_data = (caddr_t)&edata;
if(!ioctl(fd, SIOCETHTOOL, &ifr)) {
if(edata.data) {
fprintf(stdout, "link detected on %s/n", devname);
return 0;
} else {
errno=ENONET;
}
}
perror("linktest");
return errno;
}
int
main(int argc, char *argv[])
{
if(argc != 2) {
usage(argv[0]);
}
return linktest(argv[1]);
}
程序4:调节音量