【网络通信四】ping工具源码cmake工程编译以及运行说明

从零部署阿拉德源码:Linux服务端与Unity客户端联调实战 游戏服务器部署是游戏开发与运维中的核心环节,涉及服务端编译、网络通信、数据库配置与系统调优等多个技术领域。其原理在于构建一个稳定、高效的后端环境,以处理客户端请求、执行业务逻辑并持久化数据。对于基于C++的传统MMORPG服务端,在Linux系统上进行部署具有更高的性能与可控性价值。本文聚焦于“阿拉德源码”这一具体案例,详细拆解了在CentOS 7.6环境下,完成从系统配置、依赖安装、服务端编译到最终与特定版本Unity客户端成功联调的全流程。文中特别针对“服务端编译”与“数据库配置”等关键步骤中的常见“坑 阅读详情

一、主要特色

  • 使用cmake重构了ping工具的源码工程,能够直接编译出最简单的ping工具。
  • 目前工程结构比较清晰明了,易于阅读源码

二、主要目的

  • 查看ping工具里面是如何绑定自身的特定端口进行通信的,内在原理是如何
  • 想要通过模仿内在指定端口转发的功能,改写modbus的通讯库

三、转发试验

  • 1、目前的网络状态的情况
rk@localhost:~/pengzhikang$ ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.1.177  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::b4f5:91c6:5928:a878  prefixlen 64  scopeid 0x20<link>
        ether 6e:e8:43:36:6e:7c  txqueuelen 1000  (Ethernet)
        RX packets 135757  bytes 125066586 (125.0 MB)
        RX errors 0  dropped 121  overruns 0  frame 0
        TX packets 47791  bytes 4910035 (4.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 24  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 12396  bytes 3435542 (3.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12396  bytes 3435542 (3.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.191.5  netmask 255.255.255.0  broadcast 192.168.191.255
        inet6 fe80::e59c:e38a:ecf7:dd8c  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::a3fa:4e85:5406:d4ac  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::78a:2c86:ea36:c1bd  prefixlen 64  scopeid 0x20<link>
        ether 10:d0:7a:cb:25:35  txqueuelen 1000  (Ethernet)
        RX packets 348  bytes 60642 (60.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 500  bytes 60406 (60.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

rk@localhost:~/pengzhikang$ nmcli dev
DEVICE  TYPE      STATE      CONNECTION    
eth0    ethernet  connected  Auto Ethernet 
wlan0   wifi      connected  YunQiWIFI     
lo      loopback  unmanaged  --            
  • 2、使用cmake_ping工具进行Ping试验
# 从eth0口去ping192.168.191.6,发现无法ping通,说明确实是指定了特定的网口收发信息
rk@localhost:~/pengzhikang/cmake_ping/bin$ sudo ./cmake_ping 192.168.191.6 -I eth0 -c 10
[sudo] password for rk: 
PING 192.168.191.6 (192.168.191.6) from 10.0.1.177 eth0: 56(84) bytes of data.

--- 192.168.191.6 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 8999ms
# 从wlan0口去ping192.168.191.6,可以ping通
rk@localhost:~/pengzhikang/cmake_ping/bin$ sudo ./cmake_ping 192.168.191.6 -I wlan0 -c 10
PING 192.168.191.6 (192.168.191.6) from 192.168.191.5 wlan0: 56(84) bytes of data.
64 bytes from 192.168.191.6: icmp_seq=3 ttl=64 time=13.1 ms
64 bytes from 192.168.191.6: icmp_seq=4 ttl=64 time=127 ms
64 bytes from 192.168.191.6: icmp_seq=5 ttl=64 time=107 ms
64 bytes from 192.168.191.6: icmp_seq=6 ttl=64 time=126 ms
64 bytes from 192.168.191.6: icmp_seq=7 ttl=64 time=54.6 ms
64 bytes from 192.168.191.6: icmp_seq=8 ttl=64 time=77.1 ms
64 bytes from 192.168.191.6: icmp_seq=9 ttl=64 time=97.2 ms
64 bytes from 192.168.191.6: icmp_seq=10 ttl=64 time=117 ms

--- 192.168.191.6 ping statistics ---
10 packets transmitted, 8 received, 20% packet loss, time 9011ms
rtt min/avg/max/mdev = 13.109/90.135/127.519/37.411 ms
# 从wlan0口去ping10.0.1.28,可以ping通(主要原因是该wifi热点是从10.0.1.1的局域网发出的
rk@localhost:~/pengzhikang/cmake_ping/bin$ sudo ./cmake_ping 10.0.1.28 -I wlan0 -c 10
PING 10.0.1.28 (10.0.1.28) from 192.168.191.5 wlan0: 56(84) bytes of data.
64 bytes from 10.0.1.28: icmp_seq=1 ttl=127 time=8.19 ms
64 bytes from 10.0.1.28: icmp_seq=2 ttl=127 time=66.8 ms
64 bytes from 10.0.1.28: icmp_seq=3 ttl=127 time=8.56 ms
64 bytes from 10.0.1.28: icmp_seq=4 ttl=127 time=10.1 ms
64 bytes from 10.0.1.28: icmp_seq=5 ttl=127 time=16.5 ms
64 bytes from 10.0.1.28: icmp_seq=6 ttl=127 time=8.69 ms
64 bytes from 10.0.1.28: icmp_seq=7 ttl=127 time=16.1 ms
64 bytes from 10.0.1.28: icmp_seq=8 ttl=127 time=5.80 ms
64 bytes from 10.0.1.28: icmp_seq=9 ttl=127 time=10.5 ms
64 bytes from 10.0.1.28: icmp_seq=10 ttl=127 time=10.6 ms

--- 10.0.1.28 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9016ms
rtt min/avg/max/mdev = 5.805/16.216/66.885/17.189 ms
# 类似地,因为10.0.1.1的网段可以ping通www.baidu.com,所以wlan0也可以ping通www.baidu.com

四、目前的主要发现点

  • ping.c中通过创建int probe_fd = socket(AF_INET, SOCK_DGRAM, 0)这样的套接字,然后通过setsockopt(probe_fd, SOL_SOCKET, SO_BINDTODEVICE, device, strlen(device)+1)让其绑定在device上,从而获取本地的ip地址。
  • 后续的对icmp_sock使用bind(icmp_sock, (struct sockaddr*)&source, sizeof(source))进行绑定特定的本地网址,从而后续可以达到指定网口收发的目的。
  • ping.c使用到了icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP),创建的是原始套接字,无法保证tcp的套接字是否可以去使用上述方法去绑定。因此有待验证。

五、github工程下载

git clone https://github.com/pengzhikang/UnixNetLearning.git
cd cmake_ping
chmod +x run.sh
./run.sh
Android应用集成OpenSSL:从编译到JNI封装的安全通信实践 SSL/TLS协议是保障网络通信安全的基石,它通过非对称加密、对称加密和哈希算法相结合,在客户端与服务器之间建立加密通道,确保数据传输的机密性、完整性和身份认证。在移动开发领域,Android系统虽然提供了内置的网络安全API,但在处理自定义证书校验、特定加密套件或私有协议时,开发者往往需要更底层的控制能力。OpenSSL作为业界广泛使用的开源加密工具库,提供了完整的TLS/SSL协议实现和丰富的密码学原语,能够满足高级安全需求。通过将其集成到Android应用中,开发者可以灵活定制TLS版本、实现双向认证 阅读详情

相关推荐

从MVB到TSN/TRDP:手把手带你搭建一个简易的列车网络通信仿真环境

本文详细介绍了如何从传统MVB网络过渡到TSN/TRDP技术,手把手指导搭建列车网络通信仿真环境。通过对比三种协议的核心性能指标,帮助工程师和研究人员理解TSN和TRDP在延迟、吞吐量等方面的优势,并提供故障模拟与诊断的实用方案。

weixin_30780649的博客 489

ping程序的C语言源代码

PING程序的C语言源代码

wq897387的专栏 1981

嵌入式开发环境配置利器:Topeet Toolbox 图形化工具实战指南

在嵌入式Linux开发中,环境配置是项目启动的关键环节,涉及串口调试、网络设置、文件系统挂载和交叉编译工具链部署等一系列基础操作。其核心原理在于通过命令行与开发板建立稳定通信,并执行系统配置脚本,以实现主机与目标板的协同工作。这项技术的价值在于将重复、易错的手动流程标准化与自动化,从而显著提升开发效率,降低学习门槛。典型的应用场景包括基于ARM架构(如RK3568、i.MX6ULL)的开发板原型验证、团队协作环境搭建以及教育培训。本文聚焦的Topeet Toolbox,正是这样一款针对迅为等国产开发板的图形

weixin_33766805的博客 424

ICMP协议编程实践:实现ping命令(C语言)

转自 https://network.fasionchan.com/zh_CN/latest/practices/ping-by-icmp-c.html 众所周知,ping命令通过ICMP协议探测目标IP并计算往返时间。 本文使用C语言开发一个ping命令, 以演示如何通过套接字发送和接收ICMP协议报文。 注解 程序源码可在本文末尾复制,或者在Github上下载:ping.c。 报文封装 ICMP报文承载在IP报文之上,头部结构非常...

chenpuo的博客 6448

C/C++新手入门项目合集:GitHub资源库0voice/introduce_c-cpp_manual详解

C/C++作为系统级编程语言,其核心价值在于对计算机底层原理的深入理解和高效控制。从内存管理、指针操作到数据结构与算法,掌握这些基础概念是构建高性能应用的关键。在工程实践中,理论学习之后往往面临“如何将知识转化为实际项目”的痛点。开源社区为此提供了丰富的练手资源,其中GitHub上的项目合集成为开发者从入门到进阶的重要桥梁。这些资源覆盖了网络编程、并发处理、图形界面等核心应用场景,通过阅读和修改真实代码,能够有效提升工程思维和调试能力。本文聚焦的 `0voice/introduce_c-cpp_manual

weixin_30546189的博客 336

PingTool服务器网络ping监测工具

PingTool:服务器网络ping监测工具,可用于常规服务器的网络监测情况,其中可以自由设置日志的大小监测范围。

ping命令源码获得

$dpkg -S /bin/ping iputils-ping: /bin/ping

ylo523的专栏 1137

ping官网源码

ping源码,可以自己编译运行。官网提供的ping源码,java实现的。

抽时间看下ping的源码

https://www.jianshu.com/p/8e9903c7f9e8 源码地址:https://github.com/dgibson/iputils

yudelian的博客 768

ping的完整源码下载

完整ping的源码,从icmp协议的定义。组装协议。

局域网扫描工具 QuickPing V0.80

QuickPing 是一款非常简单小巧的快速 Ping 扫描器,判断局域网内在线主机; Size: 170464 bytes Modified: 2022年8月5日, 10:48:01 MD5: 00F310DC35B073DA86DE023A8026D46A SHA1: 8643E1E99BB9187829CEC977FAA0985C59608B02 CRC32: 41A55572

5分钟跑通SillyTavern:免费开源AI聊天前端完整使用指南

你刚把一张角色卡拖进浏览器,屏幕里的人就按你写的人设开口说话了。SillyTavern 是一个开源的 **AI 聊天前端**(LLM Frontend,给大语言模型套一层好用的操作界面),它本身不含模型,负责把你的角色、背景、参数整理成标准请求发给后端 LLM。适合想搭长期陪伴角色、跑本地模型、又嫌官方客户端功能太少的玩家。 - 🎭 连接 OpenAI、Claude、Ollama 等数十种后端

gitblog_00825的博客 1038

ping程序的源代码

广东工业大学计算机网络课设 ping程序的源代码 自行打包即可使用!

C++轻量级HTTP客户端miniwget:零依赖网络下载的工程实践

在现代C++项目开发中,依赖管理和自动化构建是提升工程效率的关键环节。HTTP客户端作为网络通信的基础组件,其核心原理是通过Socket API实现应用层协议的数据交换,为项目提供远程资源获取能力。这类技术的工程价值在于实现构建过程的自给自足,减少对外部工具的依赖,特别适用于CI/CD流水线、跨平台构建脚本等场景。miniwget正是这一理念的典型代表,它是一个专注于HTTP/HTTPS GET请求的轻量级单文件库,设计目标强调最小化依赖和易于集成,能够有效支撑包管理器或构建系统的底层网络获取需求。通过合理

agtvo48266的专栏 441

HarmonyOS开发第一步:Dev Eco Studio4.0保姆级安装配置指南(含Node.js环境)

本文提供HarmonyOS开发环境搭建的保姆级教程,重点详解Dev Eco Studio 4.0的安装与配置,并攻克Node.js环境与Ohpm包管理器的关键设置难点。通过清晰的步骤指引,帮助开发者从零开始,高效完成开发环境部署,顺利迈出鸿蒙应用开发的第一步。

lake5的博客 569

版图提取的spice网表中参数含义及二级效应STI/WPE

寄生电阻、寄生电容可以从版图提出的.sp文件中看, ad area of drain 面积 as area of source pd perimeter of drain 周长,PS PD周长都不计算与栅极接触的部分 ps perimeter of source nrd 漏扩散区等效方块数 nrs 源扩散区等效方块数 sa ...

qq_40007892的博客 6552

嵌入式Linux开发实战:高频命令、工具链与系统调试全指南

嵌入式Linux开发是构建智能设备的核心技术,它涉及在资源受限的硬件上运行完整的操作系统。其原理在于通过Linux内核管理硬件资源,并利用丰富的开源工具链进行交叉编译、调试和部署。掌握嵌入式Linux开发能显著提升设备的功能复杂性、网络连接能力和可维护性,广泛应用于物联网网关、工业控制、消费电子和汽车电子等领域。本文聚焦于嵌入式Linux开发中的高频实战需求,系统梳理了从环境搭建、系统监控到网络调试与性能分析的核心命令流,特别是针对**交叉编译**和**根文件系统**等关键环节,提供了可直接复用的工具清单与

weixin_34354945的博客 351

EDA公司(一):Synopsys-- 主要 EDA 工具及其简介

Synopsys 是一家领先的电子设计自动化(EDA)软件公司,提供了一系列全面的产品和服务,旨在支持从概念设计到大规模生产的各个阶段。Synopsys 的 EDA 工具覆盖了芯片设计的各个方面,包括但不限于逻辑综合、静态时序分析、功能验证、物理实现、形式验证、测试插入、电源分析、信号完整性分析等。

MHD0815的博客 3311

RP2040+W5500通过DHCP自动获取IP的MicroPython固件编译与配置指南

在嵌入式物联网开发中,实现设备的网络连接是基础且关键的一步。其核心原理在于微控制器通过硬件或软件协议栈处理TCP/IP网络通信,从而赋予设备联网能力。这项技术的价值在于极大简化了嵌入式设备的网络接入复杂度,提升了开发效率和系统稳定性,是实现智能硬件、远程监控、数据采集等应用的基石。典型的应用场景包括工业传感器节点、智能家居终端和便携式网络设备等。本文聚焦于基于RP2040微控制器和WIZnet W5500硬件协议栈芯片的组合,深入探讨如何通过编译定制MicroPython固件,并配置DHCP客户端,实现设备

weixin_30340819的博客 307

SeetaFace6人脸活体检测C++代码实现Demo

活体检测是判断人脸图像是来自真人还是来自攻击假体(照片、视频等)的方法。 人脸识别系统存在被伪造攻击的风险。因此需要在人脸识别系统中加入活体检测,验证用户是否为真实活体本人操作,以防止照片、视频、以及三维模型的入侵,从而帮助用户甄别欺诈行为,保障用户的利益。

mickey2007的博客 3470

共封装光学(CPO):下一代互联革命

Nvidia:产品:Quantum-X Q3450(115.2T,144×800G,2025H2上市)、Spectrum 6800(409.6T,512×800G,2026H2上市);技术路线:TSMC COUPE封装、MRM调制器、光栅耦合、外部激光源(Lumentum/Ayar Labs供应);战略定位:以横向扩展CPO验证供应链,最终聚焦纵向扩展场景(Feynman架构)。

存储随笔 4964

yuzu仿真平台实战指南:5步掌握Switch游戏PC端部署与优化

yuzu是一款基于C++开发的开源任天堂Switch仿真平台,支持Windows、Linux和Android多平台运行。作为目前最活跃的Switch仿真项目,yuzu通过精确的硬件模拟和优化的图形渲染,让玩家能够在PC端流畅体验Switch游戏。本指南将深入解析yuzu的技术架构,提供从环境部署到性能调优的完整解决方案。 ## 技术架构深度解析:理解yuzu的核心设计 yuzu仿真平台采用模块

gitblog_01074的博客 623

基于STM32的宠物智能照护嵌入式系统设计

嵌入式系统是实现物联网终端设备本地化感知、决策与执行的核心技术载体,其关键在于多传感器融合、低功耗执行控制与轻量级云边协同。本文围绕环境监测(温湿度、烟雾、余粮)、机电执行(步进电机食盘、继电器风扇)和可靠通信(MQTT+ESP8266)三大技术主线,深入解析STM32F103在资源约束下的外设调度策略、ADC采样抗干扰设计、DHT11时序精准控制及HX711称重滤波算法等工程实践要点。系统强调本地闭环优先原则,确保离线基础功能可用,同时通过阿里云IoT平台实现远程监控与告警联动,为中小型智能硬件项目提供可

weixin_29155599的博客 293

单片机工程师转型嵌入式Linux:从裸机思维到操作系统开发的实战指南

嵌入式系统开发涵盖从资源受限的单片机到功能丰富的嵌入式Linux两大领域。其核心原理在于硬件抽象与资源管理,单片机通常采用裸机或RTOS进行直接硬件控制,而嵌入式Linux则构建在完整的操作系统之上,通过内核调度、虚拟内存和系统调用提供多任务与资源隔离能力。这一技术演进带来了开发范式的根本转变,从顺序执行和中断驱动转向事件驱动和多进程协作,显著提升了复杂应用的开发效率与系统可靠性。在物联网网关、工业控制、智能设备等场景中,嵌入式Linux能够更好地支持网络通信、图形界面和高性能计算需求。对于习惯单片机开发的

weixin_33895657的博客 398

边缘设备选型指南:从数据采集到AI推理,工业物联网硬件如何匹配你的需求?

本文提供了一份全面的工业物联网边缘设备选型指南,系统性地阐述了如何根据数据采集、协议兼容性、边缘AI推理算力及环境适应性等核心需求匹配硬件。文章深入剖析了从CPU/GPU/NPU选择到MQTT、Sparkplug B等工业协议支持的实战考量,并强调了软件生态与全生命周期成本的重要性,旨在帮助项目负责人在复杂场景中做出明智决策。

weixin_29168813的博客 88

AI OS与LLM as OS:人工智能操作系统的崛起

近年来,随着大语言模型(Large Language Model, LLM)技术的突飞猛进,人工智能领域掀起了新的革命浪潮。以ChatGPT、GPT-4等为代表的LLM模型展现出了惊人的自然语言理解和生成能力,使得人机交互前所未有地拟人化、情境化。在此背景下,业界开始探索将LLM作为操作系统(Operating System, OS)的可能性,由此催生出"AI OS"和"LLM as OS"的概念。本文将深入解读这两个前沿概念,分析其内涵、技术原理、应用前景及面临的挑战。

AI天才研究院 993
上一篇: 【渣渣彭-错误记录】专门记录本人的撒币问题
下一篇: [深度学习主流框架解析一] Caffe
慷仔
博客等级 码龄9年 88粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值