Wireshark入门与进阶系列十二之IP冲突

0x00 前言

        这里,我们介绍如何使用wireshark 来分析网络中IP冲突的问题。其中IP冲突一般是指局域网中的IP冲突,例如两台主机使用了相同的IP地址。更进一步的划分个人主机IP冲突和服务器主机IP冲突。但是我们的分析的角度都是从本地个人电脑着手的。

0x01 个人主机IP冲突

现象: 首先,我们所说的个人主机包括笔记本等PC端、手机等移动端。然后,我们在相同的局域网环境(通俗地说,共同连接相同的一个WIFI、校园网内、公司内网),接着,个人主机A和个人主机B是被分配了相同的IP地址,这里我们假定为192.168.5.31。至于为啥会出现两台主机使用了一个相同的IP?这里有很多原因:1、个人主机B手动分配了自己IP为:192.168.5.31,但是这个IP已经之前已被DHCP分配了给主机A。所以产生了IP冲突。
2、在同一个局域网(WIFI、校园网、公司内网),接入的用户数目过多,导致IP重新分配。即是接入的用户很多,在IP地址不够用的情况下。例如192.168.5.31已经被分配了主机A,但是主机A下线了。主机B上线了,但这时,接入的用户数目过多,这时DHCP池已经没有IP地址分配了,这时一些已经分配了的IP地址,但这些拥有已分配的IP地址的主机下线了。这时IP又会被收回分配给主机B。由于DHCP更新的问题,主机A还可以使用原来的地址。这时就造成IP冲突。还有很多原因这里就不一一介绍了。

下面我们来简单分析这些问题的产生原因。

本地主机A为:192.168.5.31

设置wireshark 显示过滤器为:!dns and ip.addr == 192.168.5.31 

或者!(dns and arp) and tcp.port == 80 or tcp.port == 443

其他设置:【视图】--【解释名称】--【解释网络地址】、【解释物理地址】<<--(勾选)

判断依据:首先尽可能关闭本地主机A的网络连接【浏览器、下载、各种网络通信-QQ、微信等等】,让本地主机处于一种无连接状态

然后我们观察其中捕获的流量。

现象1:如果此时出现很多其他网络连接(百度,淘宝等或者一些其他网站),证明局域网另外一台同IP的主机正在上网,从而证明IP冲突

现象2:如果此时没有出现很多其他连接,证明局域网另外一台同IP的主机没有进行上网或者网络流量极小,从而证明IP冲突

现象3:对于源主机是网站的IP,会有两次的回传连接,并且长度都是一样的。证明局域网另外一台同IP的主机正在上网,从而证明IP冲突




0x02 服务器IP冲突

        对于服务器的IP冲突,这里比个人电脑稍微复杂点。因为我们通过访问WEB服务来发现IP十分冲突。因为第一点:两台服务必须提供web服务;第二,这两台服务必须存活,没有做负载均衡设置;第三,这两台服务器具有不同的标志。第四,对外服务的端口必须一致。这里,我假设服务器的IP为:192.168.5.31,容器为JETTY,当然其他容器也是可以,那么我们在个人主机访问服务器的地址为:http://192.168.5.31:8000/

现象:我们通过访问http://192.168.5.31:8000/,发现有时可以访问该网页,有时访问不了。或者可以访问这个地址,但是访问速度很慢。

#备注:因为手上没有现成的案例,这个暂时按照个人主机IP冲突处理,其实在服务器的网关那里抓包,分析的方式和现象和个人主机IP冲突是一模一样的。但是从个人主机这个角度,分析难度就大很多。就类似古代中医用牵线把脉那样困难了。

下面我们来简单分析这些问题的产生原因。

服务器的A为:192.168.5.31

服务器的B为:192.168.5.31

设置wireshark 显示过滤器为:!dns and ip.addr == 192.168.5.31

其他设置:【视图】--【解释名称】--【解释网络地址】、【解释物理地址】<<--(勾选)

判断依据:

现象1:如果此时出现很多其他网络连接(百度,淘宝等或者一些其他网站),证明局域网另外一台同IP的主机正在上网,从而证明IP冲突

现象2:如果此时没有出现很多其他连接,证明局域网另外一台同IP的主机没有进行上网或者网络流量极小,从而证明IP冲突

现象3:对于源主机是网站的IP,会有两次的回传连接,并且长度都是一样的。证明局域网另外一台同IP的主机正在上网,从而证明IP冲突




欢迎大家分享更好的思路,热切期待^^_^^ !

<think>好的,我现在需要帮用户规划上位机开发的学习路线。首先,我得明确什么是上位机。上位机通常指通过通信接口下位机(如PLC、单片机)交互的计算机系统,用于数据监控、处理和人机交互。用户可能是想进入工业自动化、物联网或测控系统领域,需要掌握相关的技能。 接下来,我得分解学习路径的关键部分。上位机开发涉及多个方面,包括编程语言、通信协议、数据库、框架和工具等。我需要考虑用户可能的基础,比如是否有编程经验,是否需要从基础开始讲起。假设用户是初学者,需要从最基础的开始。 首先,编程语言方面,C#和Python是上位机常用的语言。C#在工业领域应用广泛,尤其是Windows平台,而Python适合快速开发和处理数据。可能需要先推荐学习这两种语言的基础,再深入到实际应用。 然后是通信协议部分,常见的如串口通信(RS232/485)、Modbus、TCP/IP、MQTT等。上位机需要下位机进行数据交换,所以必须掌握这些协议的原理和实现方法。比如,Modbus协议在工业自动化中非常常见,用户需要学会如何使用C#或Python库来实现Modbus通信。 接下来是数据库,上位机通常需要存储和查询数据,所以需要学习数据库技术,比如SQLite、MySQL或SQL Server。可能需要教用户如何连接数据库,进行CRUD操作,以及数据分析和展示。 图形界面开发也是重要的一环,C#的WinForms和WPF,Python的Tkinter或PyQt都是常用的GUI框架。用户需要学会设计界面,绑定数据,处理用户输入等。 此外,可能还需要涉及多线程和异步编程,因为上位机需要同时处理通信、界面响应等任务,避免界面卡顿。这部分可能对新手来说有点难度,需要详细说明。 软件工程的知识也不可少,比如版本控制Git,单元测试,设计模式,这些能帮助用户写出更健壮和可维护的代码。用户可能需要了解基本的开发流程和工具。 行业相关的知识,比如工业自动化中的SCADA系统,物联网的数据采集,这些可能需要结合实际案例来讲解。用户需要理解上位机在不同场景下的应用。 最后,实践项目是关键。通过实际项目,比如温湿度监控系统、PLC数据采集系统,用户能巩固所学知识。推荐开源项目和社区资源,帮助用户持续学习和解决问题。 在整理这些内容时,要确保结构清晰,步骤明确,由浅入深。可能需要分阶段,每个阶段列出学习内容和目标。同时,提醒用户注意实际应用中的常见问题,比如通信稳定性、数据安全等。还要考虑用户可能遇到的问题,比如如何选择合适的通信协议,如何处理多线程中的同步问题,这些都需要在路线中给出指导。 总结一下,学习路线应该包括:编程基础→通信协议→数据库→GUI开发→多线程/异步→软件工程→行业知识→项目实战。每个部分给出具体的学习建议和资源推荐,帮助用户逐步掌握上位机开发的技能。</think>### 上位机开发学习路线(分阶段详解) --- #### **阶段1:编程语言基础** 上位机开发核心依赖编程能力,推荐优先掌握以下语言: 1. **C#(工业领域首选)** - 基础语法:变量、流程控制、类对象 - 关键库:`System.IO.Ports`(串口通信)、`System.Net.Sockets`(网络通信) - 学习资源:微软官方文档、《C#图解教程》 2. **Python(快速开发/数据分析)** - 基础语法:列表/字典、函数、文件操作 - 关键库:`pyserial`(串口)、`pymodbus`(Modbus协议) - 学习资源:廖雪峰Python教程、《Python编程:从入门到实践》 --- #### **阶段2:通信协议硬件交互** 掌握常见工业通信协议及实现方法: 1. **串口通信(RS232/485)** - 实现方式:C#通过`SerialPort`类;Python通过`pyserial`库 - 调试工具:串口调试助手、Putty 2. **Modbus协议(工业场景高频使用)** - 协议类型:RTU(二进制)、TCP(网络) - 代码示例(C#): ```csharp using Modbus.Device; ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort); ushort[] registers = master.ReadHoldingRegisters(slaveAddress, startAddress, numRegisters); ``` 3. **网络通信(TCP/IP, MQTT)** - TCP:实现设备间稳定数据传输 - MQTT:物联网场景下的轻量级消息协议(推荐库:`MQTTnet` for C#,`paho-mqtt` for Python) --- #### **阶段3:数据存储处理** 1. **数据库技术** - SQL基础:建表、增删改查(CRUD) - 数据库选型: - SQLite(轻量级嵌入式,适合本地存储) - MySQL/SQL Server(服务端数据库,支持高并发) - ORM框架:C#的`Entity Framework`,Python的`SQLAlchemy` 2. **数据分析可视化** - 工具:Python的`Matplotlib`、`Pandas` - 场景:生成实时曲线、历史数据报表 --- #### **阶段4:图形界面开发(GUI)** 1. **C#方向** - WinForms:拖拽式开发,适合快速搭建界面 ```csharp // 示例:按钮点击事件 private void btnStart_Click(object sender, EventArgs e) { serialPort.Open(); } ``` - WPF:支持复杂动画数据绑定,学习XAML语法 2. **Python方向** - PyQt/PySide:功能强大的跨平台框架 - Tkinter:内置轻量级工具,适合简单需求 --- #### **阶段5:进阶技能** 1. **多线程异步编程** - 必要性:防止界面卡顿,提升通信效率 - C#实现:`async/await`、`Task`类 - Python实现:`threading`模块、`asyncio`库 2. **软件工程规范** - 版本控制:Git基础(提交、分支、合并冲突) - 单元测试:C#的`NUnit`、Python的`unittest` - 设计模式:单例模式、观察者模式(如实时数据更新场景) --- #### **阶段6:行业知识拓展** 1. **工业自动化标准** - 学习OPC UA协议(跨平台数据交互) - 了解SCADA系统架构(如WinCC、Ignition) 2. **物联网(IoT)集成** - 云平台对接:阿里云IoT、AWS IoT Core - 边缘计算:部署本地数据处理逻辑 --- #### **阶段7:实战项目** 1. **入门项目** - 温湿度监控系统:通过串口读取传感器数据,实时显示曲线 - PLC数据采集:用Modbus TCP读取PLC寄存器值并存储到数据库 2. **进阶项目** - 多设备协同控制系统:整合PLC、机器人、视觉传感器 - 远程运维平台:Web API + 上位机,实现异地设备状态监控 --- #### **工具资源推荐** - **开发工具**:Visual Studio(C#)、PyCharm(Python)、VSCode - **调试工具**:Modbus Poll(协议测试)、Wireshark(网络抓包) - **开源项目参考**: - GitHub搜索关键词:`SCADA`, `HMI`, `Industrial Automation` - 推荐库:`Sharp7`(C#S7协议通信)、`OpenPLC`(开源PLC仿真) --- 通过以上路线逐步深入,配合实际项目打磨技能,可系统掌握上位机开发能力。遇到具体技术难点时,建议结合官方文档+社区(Stack Overflow、CSDN)针对性突破。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值