歡迎您光臨本站 註冊首頁

寫成CGI 實現 修改 LINUX網路參數

←手機掃碼閱讀     火星人 @ 2014-03-05 , reply:0

寫成CGI 實現 修改 LINUX網路參數

,如果 用C語言 實現 修改 LINUX網路參數。
   比如修改  系統的  IP。NETMASK。DNS。網關 等等信息。
      用C編程實現,怎麼實現。。

我的思理
     1. 找LINUX源碼中的ifconfig。然後挖出來。。
     2. 第二,打開/etc/sysconfig//networkk-scripts/ifcfg-eth0。按照要求 更改。,然後system("service network start")  /我的問題是。我不知道怎麼去按照 要求 對文件進行 個更改
  
   知道的朋友 能不能指點下。。如果可以,給個 演示的 代碼。感激不盡亞
     
還有。想搞的東西是 用C寫CGI。完成一個B/S模式的 網路 管理的東西。。
《解決方案》

那你還是 system("ifconfig <device> ....");  這樣來得方便, 注意程序要 chmod +s
《解決方案》

用下面的這個代碼片斷, 註釋我已經寫好.
在 unix-like 系統上, ifconfig 都採用的下面類似下面的函數實現.
說白了, 都是 BSD 實現或變型.

Good Luck, 晚安!


1   typedef struct _if_conf_param{
2           struct sockaddr addr;
3           struct sockaddr mask;
4           struct sockaddr brcst;
5           struct sockaddr hw_addr;
6   }if_conf_param_t;
7   
8   int change_if_param(const char *name, if_conf_param_t *if_param)
9   {
10          int ret = 0;
11          int sockfd;
12          struct ifreq ifr;
13          struct sockaddr_in *sin;
14          strcpy(ifr.ifr_name, name);
15         
16          /* open an sock to communicate with interface */
17          if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
18                  return -1;
19                 
20          /* set ip address */
21          ifr.ifr_addr = if_param->addr;
22          if (ioctl(sockfd, SIOCSIFADDR, &ifr) < 0)
23                  return -1;
24                 
25          /* set ip mask and broadcase address */
26          sin = (struct sockaddr_in *)&if_param->addr;
27          if (sin->sin_addr.s_addr != INADDR_ANY) {
28         
29                  /* set ip mask */
30                  if (if_param->mask.sa_family == AF_INET) {
31                          ifr.ifr_netmask = if_param->mask;
32                          if (ioctl(sockfd, SIOCSIFNETMASK, &ifr) < 0)
33                                  return -errno;
34                  }
35                 
36                  /* set broadcase address */
37                  if (if_param->brcst.sa_family == AF_INET) {
38                          ifr.ifr_broadaddr = if_param->brcst;
39                          if (ioctl(sockfd, SIOCSIFBRDADDR, &ifr) < 0)
40                                  return -errno;
41                  }
42          }
43         
44          close(sockfd);
45         
46          return 0;
47  }
《解決方案》

感謝 老大阿,
看看發帖子的 時間 0.15

  呵呵。。老大。注意 休息呀

[火星人 ] 寫成CGI 實現 修改 LINUX網路參數已經有539次圍觀

http://coctec.com/docs/service/show-post-45626.html