互联网站建设维护需要做什么,找做网站的个人,长春网站建设联系吉网传媒优,网站开发商外包1. pppd拨号成功后#xff0c;会将解析到的dns服务器IP地址#xff0c;写入/etc/ppp/resolv.conf 这样的话#xff0c;gethostbyname_r并不会识别#xff0c;并且#xff0c;如果有启动两路pppd的话#xff0c;后面一路会将resolv.conf文件重写。 因此#xff0c;这块代… 1. pppd拨号成功后会将解析到的dns服务器IP地址写入/etc/ppp/resolv.conf 这样的话gethostbyname_r并不会识别并且如果有启动两路pppd的话后面一路会将resolv.conf文件重写。 因此这块代码需要修改。 在pppd/ipcp.c文件中修改create_resolv函数即可 static void
create_resolv(peerdns1, peerdns2)u_int32_t peerdns1, peerdns2;
{FILE *f;int find1 0, find2 0;char buf[1024];bzero(buf, sizeof(buf));f fopen(_PATH_LINUX_RESOLV, a);if (f NULL){error(Failed to create %s: %m, _PATH_LINUX_RESOLV);return;}while((fgets(buf,1024,f))!NULL){int n strlen(buf);buf[n - 1] 0;if(!strcmp(buf11, ip_ntoa(peerdns1))){find1 1;}if(!strcmp(buf11, ip_ntoa(peerdns2))){find2 1;}bzero(buf, sizeof(buf));}if(find1 0)fprintf(f, nameserver %s\n, ip_ntoa(peerdns1));if(find2 0)fprintf(f, nameserver %s\n, ip_ntoa(peerdns2));if (ferror(f))error(Write failed to %s: %m, _PATH_LINUX_RESOLV);fclose(f);
}_PATH_LINUX_RESOLV这个路径为/etc/resolv.conf
这样修改后pppd拨号成功后会先搜索resolv.conf文件如果要写入的dns已经存在那么就不写如果不存在
则追加进去并不重写文件。 2. 如果两路同时拨通后需要知道ppp0ppp1与串口设备文件的对应关系可以修改源码生成这个对应关系文件。 static void
create_relation(peerdns1, peerdns2)u_int32_t peerdns1, peerdns2;
{FILE *f;int find 0;char buf[1024];bzero(buf, sizeof(buf));f fopen(_PATH_PPPD_RELATION, r);if(f ! NULL){while((fgets(buf,1024,f))!NULL){//例子: ppp0 /dev/ttySAC3 183.230.126.225 183.230.126.224//判断如果文件中另一个ppp存在的话,并且它的串口名称和这次连接的串口名称不一样的话,//就保存下来if(memcmp(buf, ifname, 4) memcmp(buf 5, devnam, 12)){find 1;break;}}fclose(f);}f fopen(_PATH_PPPD_RELATION, w);if (f NULL){error(Failed to create %s: %m, _PATH_PPPD_RELATION);return;}if(find 1)fprintf(f, buf);char dns1[64];char dns2[64];bzero(dns1, sizeof(dns1));bzero(dns2, sizeof(dns2));strcpy(dns1, ip_ntoa(peerdns1));strcpy(dns2, ip_ntoa(peerdns2));fprintf(f, %s %s %s %s\n, ifname, devnam, dns1, dns2);if (ferror(f))error(Write failed to %s: %m, _PATH_PPPD_RELATION);fclose(f);
}
_PATH_PPPD_RELATION之个路径随意将create_relation这个函数加到create_resolv这个函数的调用后面即可 生成的文件效果如上图所示