社区导航

 

搜索
查看: 894|回复: 0

[分享] 4 Linux 网络编程 TCP 协议(抓包)

[复制链接]

440

TA的帖子

16

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-6-21 14:43 | 显示全部楼层 |阅读模式
本帖最后由 兰博 于 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.png

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

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

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



2.png
图2 OmniPeek 抓取到的数据

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



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

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


4.png

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

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

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


5.png

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

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

3. 分析 TCP 协议

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

下回分解。

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

来源:EEWorld 嵌入式系统编程板块,转载请附上链接


回复

使用道具 举报

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

关闭

站长推荐上一条 /3 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-8-21 02:08 , Processed in 0.085916 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表