zoukankan      html  css  js  c++  java
  • netlink

    #include <sys/socket.h>
    #include <linux/types.h>
    #include <linux/netlink.h>
    #include <linux/rtnetlink.h>
    
    int main(void)
    {
            int nl_socket;
            if((nl_socket = socket(PF_NETLINK,SOCK_DGRAM,NETLINK_ROUTE)) == -1)
                    exit(1);
    
            struct sockaddr_nl addr;
            memset(&addr,0,sizeof(addr));
            addr.nl_family = PF_NETLINK;
            addr.nl_groups = RTMGRP_IPV4_IFADDR;
            addr.nl_pid=0;
    
            if(bind(nl_socket,(struct sockaddr *)&addr,sizeof(addr)) == -1)
            {       
                    close(nl_socket);
                    exit(1);
            }
    
    
    
            return 0;
    }  

    http://blog.csdn.net/luckyapple1028/article/details/50839395

    http://blog.csdn.net/luckyapple1028/article/details/50936563

    https://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <sys/select.h>
    #include <sys/time.h> 
    
    #include <linux/types.h>
    #include <linux/netlink.h>
    #include <linux/rtnetlink.h>
    #include <linux/if.h>
    #include <linux/if_ether.h>
    
    #define MAX_MSG_SIZE    1024
    
    void handle_newaddr(void)
    {
    	system("/usrsbin/mDNSResponder -f /var/rendezvous.conf -v 2");
    }
      
    void receive_netlink_message(int sock)
    {
        int ret,length;
        fd_set nl_rset;
        struct nlmsghdr *nl;
        struct timeval read_timeout = {10, 0};
        struct iovec iov;  // 使用 iovec 进行接收
        struct msghdr msg = {NULL, 0, &iov, 1, NULL, 0, 0}; // 初始化 msghdr
         
        nl = NULL;
        if ((nl = (struct nlmsghdr *) malloc(MAX_MSG_SIZE)) == NULL )
             return;
              
        iov.iov_base = (void *)nl;             // 封装 nlmsghdr
        iov.iov_len = MAX_MSG_SIZE;  // 指定长度
         
        FD_ZERO(&nl_rset); 
        FD_SET(sock, &nl_rset);
         
        while(1)
        {
            ret=select(sock+1,&nl_rset,NULL, NULL,&read_timeout);
            printf("===============ret=%d===============
    ",ret); 
    	
            if(ret == -1)  
                continue; 
            else if (ret == 0)  
                continue;
    	else
    	{
    	    length = recvmsg(sock,&msg,0);
    
    	    if(length <= 0)
                {
    		free(nl);
    		break;
    	    }
    	    switch(nl->nlmsg_type)
    	    {
    		case RTM_NEWADDR:
    			handle_newaddr();
    			break;
    		default:
    			printf("Unknown netlink message type : %d", nl->nlmsg_type);
    	   }
            }
        }
        return ;
    }
     
    int main(void)
    {
        int nl_socket;
        struct sockaddr_nl addr;
         
        if((nl_socket = socket(PF_NETLINK,SOCK_DGRAM,NETLINK_ROUTE)) == -1)
            exit(1);
         
        memset(&addr,0,sizeof(addr));
        addr.nl_family = PF_NETLINK;
        addr.nl_groups = RTMGRP_IPV4_IFADDR;
        addr.nl_pid=0;
      
        if(bind(nl_socket,(struct sockaddr *)&addr,sizeof(addr)) == -1)
        {     
            close(nl_socket);
            exit(1);
        }
        while(1)
        {
    	printf("111111111111111111111111111
    ");
    	receive_netlink_message(nl_socket);
        }
        return 0;
    }
    

    https://www.cnblogs.com/oracleloyal/p/5333276.html

    https://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/

    http://blog.csdn.net/hansel/article/details/38088645

    http://blog.csdn.net/gt945/article/details/45315911

    网线热插拔

    #include <sys/types.h>    
    #include <sys/socket.h>    
    #include <asm/types.h>    
    #include <linux/netlink.h>    
    #include <linux/rtnetlink.h>    
    #include <unistd.h>  
    #include <stdlib.h>    
    #include <stdio.h>    
    #include <sys/ioctl.h>    
    #include <linux/if.h>    
    #include <string.h>    
        
    #define BUFLEN 20480    
        
    int main(int argc, char *argv[])    
    {    
        int fd, retval;    
        char buf[BUFLEN] = {0};    
        int len = BUFLEN;    
        struct sockaddr_nl addr;    
        struct nlmsghdr *nh;    
        struct ifinfomsg *ifinfo;    
        struct rtattr *attr;    
        
        fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);    
        setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &len, sizeof(len));    
        memset(&addr, 0, sizeof(addr));    
        addr.nl_family = AF_NETLINK;    
        addr.nl_groups = RTNLGRP_LINK;    
        bind(fd, (struct sockaddr*)&addr, sizeof(addr));    
        while ((retval = read(fd, buf, BUFLEN)) > 0)    
        {    
            for (nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, retval); nh = NLMSG_NEXT(nh, retval))    
            {    
                if (nh->nlmsg_type == NLMSG_DONE)    
                    break;    
                else if (nh->nlmsg_type == NLMSG_ERROR)    
                    return -1;    
                else if (nh->nlmsg_type != RTM_NEWLINK)    
                    continue;    
                ifinfo = NLMSG_DATA(nh);    
                printf("%u: %s", ifinfo->ifi_index,    
                        (ifinfo->ifi_flags & IFF_LOWER_UP) ? "up" : "down" );    
                attr = (struct rtattr*)(((char*)nh) + NLMSG_SPACE(sizeof(*ifinfo)));    
                len = nh->nlmsg_len - NLMSG_SPACE(sizeof(*ifinfo));    
                for (; RTA_OK(attr, len); attr = RTA_NEXT(attr, len))    
                {    
                    if (attr->rta_type == IFLA_IFNAME)    
                    {    
                        printf(" %s", (char*)RTA_DATA(attr));    
                        break;    
                    }    
                }    
                printf("
    ");    
            }    
        }    
        
        return 0;    
    }

    http://blog.csdn.net/qq123386926/article/details/50695725

  • 相关阅读:
    ZOJ Problem Set–2417 Lowest Bit
    ZOJ Problem Set–1402 Magnificent Meatballs
    ZOJ Problem Set–1292 Integer Inquiry
    ZOJ Problem Set–1109 Language of FatMouse
    ZOJ Problem Set–1295 Reverse Text
    ZOJ Problem Set–1712 Skew Binary
    ZOJ Problem Set–1151 Word Reversal
    ZOJ Problem Set–1494 Climbing Worm
    ZOJ Problem Set–1251 Box of Bricks
    ZOJ Problem Set–1205 Martian Addition
  • 原文地址:https://www.cnblogs.com/Malphite/p/8325859.html
Copyright © 2011-2022 走看看