pppd 源码修改1
?1. pppd撥號(hào)成功后,會(huì)將解析到的dns服務(wù)器IP地址,寫入/etc/ppp/resolv.conf
? ? 這樣的話,gethostbyname_r并不會(huì)識(shí)別,并且,如果有啟動(dòng)兩路pppd的話,后面一路會(huì)將resolv.conf文件重寫。
? ? 因此,這塊代碼需要修改。
? ? 在pppd/ipcp.c文件中,修改create_resolv函數(shù)即可
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(buf+11, ip_ntoa(peerdns1))){find1 = 1;}if(!strcmp(buf+11, 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這個(gè)路徑為/etc/resolv.conf
這樣修改后,pppd撥號(hào)成功后,會(huì)先搜索resolv.conf文件,如果要寫入的dns已經(jīng)存在,那么就不寫,如果不存在,
則,追加進(jìn)去,并不重寫文件。
2. 如果兩路同時(shí)撥通后,需要知道ppp0,ppp1與串口設(shè)備文件的對(duì)應(yīng)關(guān)系,可以修改源碼生成這個(gè)對(duì)應(yīng)關(guān)系文件。
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//判斷如果文件中另一個(gè)ppp存在的話,并且它的串口名稱和這次連接的串口名稱不一樣的話,//就保存下來(lái)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之個(gè)路徑隨意,將create_relation這個(gè)函數(shù)加到create_resolv這個(gè)函數(shù)的調(diào)用后面即可
生成的文件效果如上圖所示
總結(jié)
以上是生活随笔為你收集整理的pppd 源码修改1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8千多LV拖鞋穿一个星期掉色:官方回应
- 下一篇: 矿卡“从良”了!蓝宝石发了个诡异的AMD