`
no791no
  • 浏览: 18993 次
社区版块
存档分类
最新评论

一个类似ifconfig功能的程序代码--C语言(ZZ)

 
阅读更多

一个类似ifconfig功能的程序代码--C语言(ZZ)
2010年07月30日
  
001 #include
  002 #include
  003 #include
  004 #include
  005 #include
  006 #include
  007 #include
  008 #include
  009
  010 int info_list(int all);
  011
  012 int get_interface_info(char *interface_name);
  013 int set_interface(char *interface_name);
  014 int get_ipaddr(char *interface_name);
  015 int get_mac(char *interface_name);
  016 int get_netmask(char *interface_name);
  017 int get_broadcast(char *interface_name);
  018 int set_ipaddr(char *interface_name, char *ip);
  019 int set_mac(char *interface_name, char *mac);
  020 int set_netmask(char *interface_name, char *netmask);
  021 int set_broadcast(char *interface_name, char *broadcast);
  022
  023 int interface_up(char *interface_name);
  024 int interface_down(char *interface_name);
  025
  026 int usage();
  027
  028 int main(int argc, char *argv[])
  029 {
  030     if (argc == 1)
  031     {
  032         info_list(0);
  033         return 0;
  034     }
  035
  036     if (argc == 2)
  037     {
  038         if (strcmp(argv[1], "all") == 0)
  039         {
  040             info_list(1);
  041             return 0;
  042         }
  043
  044         get_interface_info(argv[1]);
  045
  046         return 0;
  047     }
  048
  049     if (argc == 3)
  050     {
  051         if (strcmp(argv[2], "set") == 0)
  052         {
  053             set_interface(argv[1]);
  054             return 0;
  055         }
  056         if (strcmp(argv[2], "up") == 0)
  057         {
  058             interface_up(argv[1]);
  059             return 0;
  060         }
  061         if (strcmp(argv[2], "down") == 0)
  062         {
  063             interface_down(argv[1]);
  064             return 0;
  065         }
  066
  067         usage();
  068
  069         return 0;
  070     }
  071
  072     usage();
  073
  074     return 0;
  075 }
  076
  077 int info_list(int all)
  078 {
  079     int len;
  080     char *ifreq_pointer;
  081     len = 10 * sizeof(struct ifreq);
  082     ifreq_pointer = (char *) malloc(len);
  083
  084     struct ifconf get_info;
  085     get_info.ifc_len = len;
  086     get_info.ifc_ifcu.ifcu_buf = ifreq_pointer;
  087
  088     int sockfd;
  089     sockfd = socket(PF_INET, SOCK_STREAM, 0);
  090     ioctl(sockfd, SIOCGIFCONF, &get_info);
  091
  092     int count;
  093     count = get_info.ifc_len / sizeof(struct ifreq);
  094
  095     struct sockaddr_in *return_sockaddr;
  096
  097     struct ifreq *result = (struct ifreq *) ifreq_pointer;
  098     int i = 0;
  099     if (all == 1)
  100     {
  101         for (i; i ifr_name);
  104             get_ipaddr(result->ifr_name);
  105             get_mac(result->ifr_name);
  106             get_netmask(result->ifr_name);
  107             get_broadcast(result->ifr_name);
  108         }
  109     } else
  110     {
  111         struct ifreq tmp;
  112         int s;
  113         if ((s = socket(PF_INET, SOCK_STREAM, 0)) ifr_name);
  122             if (ioctl(s, SIOCGIFFLAGS, &tmp) socket(PF_INET, SOCK_STREAM, 0)) sin_addr));
  162
  163     return 0;
  164 }
  165
  166 int get_mac(char *interface_name)
  167 {
  168     if (strcmp(interface_name, "lo") == 0)
  169     {
  170         return 0;
  171     }
  172
  173     int s;
  174
  175     if ((s = socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) sin_addr));
  222
  223     return 0;
  224 }
  225
  226 int get_broadcast(char *interface_name)
  227 {
  228     int s;
  229
  230     if ((s = socket(PF_INET, SOCK_STREAM, 0)) sin_addr));
  249
  250     return 0;
  251
  252 }
  253
  254 int get_interface_info(char *interface_name)
  255 {
  256     get_ipaddr(interface_name);
  257     get_mac(interface_name);
  258     get_netmask(interface_name);
  259     get_broadcast(interface_name);
  260
  261     return 0;
  262 }
  263
  264 int set_interface(char *interface_name)
  265 {
  266     char ip[18];
  267     char mac_addr[20];
  268     char netmask[18];
  269     char broadcast[18];
  270
  271     printf("Change ");
  272     get_ipaddr(interface_name);
  273     printf("To:  ");
  274     fgets(ip, 17, stdin);
  275     if (strcmp(ip, "\n") == 0)
  276         goto set_mac;
  277     set_ipaddr(interface_name, ip);
  278
  279   set_mac:
  280     printf("Change ");
  281     get_mac(interface_name);
  282     printf("To:  ");
  283     fgets(mac_addr, 19, stdin);
  284     if (strcmp(mac_addr, "\n") == 0)
  285         goto set_netmask;
  286     set_mac(interface_name, mac_addr);
  287
  288   set_netmask:
  289     printf("Change ");
  290     get_netmask(interface_name);
  291     printf("To:  ");
  292     fgets(netmask, 17, stdin);
  293     if (strcmp(netmask, "\n") == 0)
  294         goto set_broadcast;
  295     set_netmask(interface_name, netmask);
  296
  297   set_broadcast:
  298     printf("Change ");
  299     get_broadcast(interface_name);
  300     printf("To:  ");
  301     fgets(broadcast, 17, stdin);
  302     if (strcmp(broadcast, "\n") == 0)
  303         return 0;
  304     set_broadcast(interface_name, broadcast);
  305
  306     return 0;
  307 }
  308
  309 int interface_up(char *interface_name)
  310 {
  311     int s;
  312
  313     if ((s = socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0))  47)
  442             tmp = mac_addr - 48;
  443         if (mac_addr  64)
  444             tmp = mac_addr - 55;
  445         if (mac_addr  96)
  446             tmp = mac_addr - 87;
  447         tmp = tmp  47)
  449             tmp |= (mac_addr[i + 1] - 48);
  450         if (mac_addr[i + 1]  64)
  451             tmp |= (mac_addr[i + 1] - 55);
  452         if (mac_addr[i + 1]  96)
  453             tmp |= (mac_addr[i + 1] - 87);
  454         memcpy(&ifr.ifr_ifru.ifru_hwaddr.sa_data[j++], &tmp, 1);
  455     }
  456
  457     if (ioctl(s, SIOCSIFHWADDR, &ifr) socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) < 0)
  504     {
  505         perror("Socket");
  506         return -1;
  507     }
  508
  509     struct ifreq ifr;
  510     strcpy(ifr.ifr_name, interface_name);
  511
  512     struct sockaddr_in broadcast_addr;
  513     bzero(&broadcast_addr, sizeof(struct sockaddr_in));
  514     broadcast_addr.sin_family = PF_INET;
  515     inet_aton(broadcast, &broadcast_addr.sin_addr);
  516
  517     memcpy(&ifr.ifr_ifru.ifru_broadaddr, &broadcast_addr,
  518            sizeof(struct sockaddr_in));
  519
  520     if (ioctl(s, SIOCSIFBRDADDR, &ifr) < 0)
  521     {
  522         perror("ioctl");
  523         return -1;
  524     }
  525
  526     return 0;
  527 }
  528
  529 int usage(void)
  530 {
  531     printf("Usage: myifconfig [all]|[interface [set|up|down]]\n");
  532     return 0;
  533 }
  把每行开头的空格换成0
  :%s/^\ /0/
  去掉每行开头的行号(数字)
  :%s/^[0-9]*//
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics