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(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这个路径为/etc/resolv.conf

这样修改后,pppd拨号成功后,会先搜索resolv.conf文件,如果要写入的dns已经存在,那么就不写,如果不存在,

则,追加进去,并不重写文件。

2. 如果两路同时拨通后,需要知道ppp0,ppp1与串口设备文件的对应关系,可以修改源码生成这个对应关系文件。

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这个函数的调用后面即可

生成的文件效果如上图所示

pppd 源码修改1相关推荐

  1. Deep Compression阅读理解及Caffe源码修改

    Deep Compression阅读理解及Caffe源码修改 作者:may0324 更新:  没想到这篇文章写出后有这么多人关注和索要源码,有点受宠若惊.说来惭愧,这个工作当时做的很粗糙,源码修改的比 ...

  2. Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮...

    Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮 前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP) ...

  3. 写一个PE的壳_Part 5:PE格式修复+lief源码修改

    系列汇总 写一个PE的壳_Part 1:加载PE文件到内存 写一个PE的壳_Part 2:ASLR+修复输入表(IAT)+重定位表支持(.reloc) 写一个PE的壳_Part 3:Section里实 ...

  4. adb 工具源码修改

    adb 工具源码修改 1.修改客户端输入后的判断逻辑,使带密码的命令 可以通过命令检查 修改 system/core/adb/client/commandline.cpp 在最前面 新增一个函数 用来 ...

  5. grbl控制3轴机械臂 原理 实现 (四) 之GRBL源码修改驱动三轴机械臂

    往期回顾: 第一篇:grbl控制3轴机械臂 原理 实现 (一) 之2D机械臂模拟及实现 第二篇:grbl控制3轴机械臂 原理 实现 (二) 之3D机械臂模拟及实现 第三篇:grbl控制3轴机械臂 原理 ...

  6. file-uploader-cli 关于上传至京东云中文件夹问题的源码修改

    file-uploader-cli源码修改 注:可以直接跳到最下面看需要修改的部分 最近由于Gitee的开源审查,导致其无法再作为图床使用.在对比了多家OSS服务后,决定使用京东云作为新图床,并使用f ...

  7. Android Dialer,Mms,Contacts源码修改笔记,移动端混合开发经验

    ②在AndroidManifest.xml中修改相应Activity的theme <activity android:name=".HomeActivity" android ...

  8. 安卓系统AOSP源码修改入门

    先整理 后学习 再总结 编译 版本查询 设备代号 驱动下载 精简编译教程 索尼编译巨详细教程 源码阅读 anroid studio 导入aosp 源码 源码结构 源码修改 内置证书抓包 默认打开ADB ...

  9. Android6.0 源码修改之Settings音量调节界面增加通话音量调节

    Android6.0 源码修改之Settings音量调节界面增加通话音量调节 前言 今天客户提了个需求,因为我们的设备在正常情况下无法调节通话音量,只有在打电话过程中,按物理音量加减键才能出现调节通话 ...

最新文章

  1. nginx启动初始化过程(二)
  2. Java泛型应用详解
  3. python论文格式检查系统_论文格式检查软件
  4. [html] 在H5中如何预加载音频?
  5. mysql宏参数_C语言带参数的宏定义
  6. python字符串的方法和列表的方法_Python 中列表和字符串的方法总结
  7. 关于使用stanfordcorenlp一直运行不报错的解决方法
  8. 【Python爬虫】之西瓜视频地址解密20210822
  9. nginx: [emerg] could not build server_names_hash
  10. 7.中文句法依存分析
  11. 2023.02.11草图大师浴室效果图1skp素材效果图
  12. 高精度计算(三)压位
  13. 哈萨克斯坦游记之一_过路老熊_新浪博客
  14. 20本必读的用户体验书目
  15. proteus常用元器件中英查询表
  16. 晋城一中oj 议员秘密
  17. NB-Iot烟感06:烟雾检测软件实现及详解
  18. org.hibernate.AssertionFailure:collection[......] was not processed by flush()
  19. debian服务器网络性能测试,在Debian和Ubuntu上使用speedtest-cli检查Internet速度
  20. java雷达_Java编写有关雷达问题,哪位高手帮个忙,谢谢~~~

热门文章

  1. HBase shell命令行
  2. c语言函数大全 chm,【oeasy丨c语言丨函数】C语言库函数使用大全CHM版
  3. mysql 多条件统计
  4. Java中的注解以及应用 @Deprecated @SupressWarning @Override
  5. centos7,google身份验证
  6. leetcode 387 C++数组做法
  7. js生成的cookie在yii2中获取不到的解决办法
  8. python变量和字符串
  9. E20170830-mk
  10. 用户设置及用户默认设置