pluto中监听各个网口的500端口处理逻辑
2024-08-30 15:44:12
1. pluto中监听各个网口的500端口处理逻辑
whack_handle()
find_ifaces()
find_raw_ifaces4()
socket、setsockopt、bind、ioctl、
通过
ioctl(master_sock, SIOCGIFCONF, &ifconf)
获取到所有的网络配置信息(网口名称和IP地址)通过
ioctl(master_sock, SIOCGIFFLAGS, &auxinfo)
获取网卡是否处于UP状态构建UP状态的<网口名,IP地址>链表,并返回此链表
在获取网口IP时,只能获取到该网口下的IP地址信息:
'''c struct raw_iface {
ip_address addr; /*这里可以看出只能获取一个IP地址*/
char name[IFNAMSIZ + 20]; /* what would be a safe size? */
struct raw_iface *next;
}; '''
find_raw_ifaces6()
- 通过
/proc/net/if_inet6
文件来获取IPv6的网络接口 - 获取网络接口IP并返回链表
- 通过
process_raw_ifaces()
ipesc
开始的接口直接跳过, 也就是说如果添加tunnel接口,这里需要确认下mast
开始的接口直接跳过遍历所有的接口,确保没有配置相同的接口IP地址
创建监听的套接字(绑定500和4500端口
接口采用的数据结构:
struct iface {
char *vname; /* virtual (ipsec) device name */
char *rname; /* real device name */
ip_address addr; /* interface IP address */
u_int16_t port; /* host byte order */
int fd; /* file descriptor of socket for IKE UDP messages */
struct iface *next;
#ifdef NAT_TRAVERSAL
bool ike_float;
#endif
enum { IFN_ADD, IFN_KEEP, IFN_DELETE } change;
};
全局变量:interfaces通过上述流程后便构造成功,且获取到了接口的所有IP地址,然后通过链表连接起来
最新文章
- 创建自己的Vagrant box
- SharePoint 2013 用IE11在线打开Word文档报错
- winfrom程序如何做到快速关闭窗体
- 几个Jquery对话框插件
- coherence初识
- 关于ANSI 和 Unicode
- Flash,EEPROM差别
- 诡异的数学,数字问题 - leetcode
- 【JS】JavaScript中的参数传递
- window平台写的shell脚步在Linux不识别
- 【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)
- 解决vscode egg调试出现: this socket has been ended by other party【转】
- Linux修改MAC地址方法
- mongodb之 非正常关闭启动报错处理
- 微信小程序开发之获取用户手机号码——使用简单php接口demo进行加密数据解密
- linux 后台执行nohup 命令,终端断开无影响
- BZOJ 2200--[Usaco2011 Jan]道路和航线(最短路&;拓扑排序)
- 关于vue-eslint自动补全代码,以及自动生成雪碧图
- Phonegap 目录结构介绍
- JDK 9 &; JDK 10 新特性
热门文章
- 安卓安装https证书
- 3D网页小实验-基于多线程和精灵动画实现RTS式单位行为
- Android菜鸟进字节跳动,居然是看了这个......
- Android:Android Studio导入OpenCV(Android项目)
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(目录)
- 课程设计-基于SSM的美容美发造型预约管理系统代码Java理发剪发设计造型系统vue美发店管理系统
- Golang语言系列-04-运算符
- Elasticsearch核心技术(二):Elasticsearch入门
- CMD直接输入Java,Javac,Javap发生乱码解决方式
- Data-truncation--Incorrect-string-value