寫成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
呵呵。。老大。注意 休息呀