5346|0

661

帖子

18

TA的资源

纯净的硅(初级)

楼主
 

4 Linux 网络编程 TCP 协议(抓包) [复制链接]

本帖最后由 兰博 于 2018-6-22 09:36 编辑

1. 准备工作

为了能够控制网络数据的传输,我们自己写一个简单的 TCP 协议的程序。我相信这一块你已经非常熟练了,在Linux 编程学习笔记的第十四部分,我们已经对简单的 socket 编程基础做了一个介绍。在这个部分,我们需要利用之前我们写好的基于 TCP 协议的大写转换服务器程序。

接下来,我们还需要一个能够运行在 Windows 上的客户端。文件清单如下:

.|-unp  |-protocol    |-tools      |-tcpserver      | |-serv.c      |-winclient        |-tcp_client.cpp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这些代码托管在 gitos 上:http://git.oschina.net/ivan_allen/unp

在你的 Linux 上,使用命令:

git clone https://git.oschina.net/ivan_allen/unp.git
  • 1

就可以把代码同步到你的机器上啦。

unp/tools/tcpserver/serv.c 文件直接在你的 Linux 上编译:

gcc serv.c -o serv
  • 1

unp/tools/winclient/tcp_client.cpp 这个文件需要你下载到你的 windows 上,在你的 Linux 中运行:

$ sz tcp_client.cpp
  • 1

就可以把它下载到你的 windows 机器上啦。如果提示找不到命令 sz 命令,你可能需要提前安装一下:

$sudo apt-get install lrzsz
  • 1

同样的还有一个命令 rz,它可以用来将 windows 上的文件上传到 Linux 中。

注意 sz、rz 需要在 xshell 或者 secure crt 程序来用。所以你需要使用 xshell 客户端程序或 secure crt 来连接到你的 Linux 虚拟机上。

tcp_client.cpp 下载到 windows 上后,请使用 vc6.0 或 vs 进行编译。

2. 开始抓包
  • 在 linux 启动你的 serv 服务器
// 指定 ip 地址和端口号$ serv 192.168.80.130 5000
  • 1
  • 2

一定要注意,ip 地址就是你的 Linux 系统上配置的 ip 地址,你可以通过 ifconfig 来查看。端口号你可以随便写,只要大于 1024 就行了。这后面这个 ip port 实际上就是服务器 serv 绑定的套接字地址。

  • 在 windows 上打开 OmniPeek 抓包

注意网卡要选 VMnet8,因为我们需要抓取 windows 和虚拟机之间的通信数据包。然后点击 Start Capture 进行抓包。

  • 打开 Windows 控制台,也就是 cmd 命令

运行方式如下,最后记得输入 q 表示退出并关闭连接。




图1 Windows 客户端上运行 tcp_client 程序

tcp_client.exe 程序就是我们之前编译的 tcp_client.cpp 文件所产生的。

这时候,在 OmniPeek 中已经抓取到了相应的数据包:




图2 OmniPeek 抓取到的数据

有可能你抓取到了很多不相关的数据包,此时你可以使用过滤器:




图3 在过滤器中输入 port(5000) 后回车

在过滤器中输入 port(5000) 后按下回车键(表示你只关心端口 5000 上传输的数据),此时为弹出一个对话框,选择 Hide unselected packets. 因为我已经选择过了,所以这里是灰色的。




图4 选择隐藏未被选择的数据包

完成后,你应该就可以看到图 2 中的画面了。当然你的数据不可能完全和我的一样。

在图 2 中表示一共在端口 5000 上抓到了 15 个数据帧,这里我们双击第 4 个数据帧,可以打开一个新的窗口看到解析的结果:




图5 第 4 个数据帧解析结果

以太网规定,帧中的数据最少为 46 字节,再加上帧头 14 字节和帧尾的 4 字节校验和,一共就是 64 字节。从图 5 中看到,该数据帧总长度为 64 字节,这并不是什么巧合。

3. 分析 TCP 协议

抓取到包后,我们当然就开始解读这些 2 进制数据的含义啦。

下回分解。

4. 总结
  • 配置好你的环境,抓取数据包

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表