《Linux编程大作业》
一、要求
作业题目
Linux下的多进程/线程网络通信
作业目标
要求学生熟练掌握《Linux编程》课程中的知识点,包括Linux常用命令、bash脚本、编译和调试环境、读写文件、进程间通信和网络编程等。基于以上知识点,分组编程完成本作业的具体要求。
问题描述

图1 Linux编程大作业示意图
网络数据的抓取和分析已经成为通信大数据分析的重要内容之一。本作业要求在Linux下使用C语言实现一个抓取并分析网络数据的软件系统。该系统采用客户端和服务器端开发模式。
在客户端,设计两个进程P1和P2同时读取网卡上的数据,P1读取数据后,负责将TCP报文中的头部数据写入到Packet文件中,P2读取数据后,负责将UDP报文的头部同样写入到Packet文件中。另外,还需要将数据发送到服务器端存储。
服务器端软件需要一个进程接收客户端发送的文件,并将接收到的数据保存成一份文件。
程序运行之后,用户可以随时终止程序的运行(比如按下CTRL+C),要求两个进程P1和P2在结束前将各自读取的报文数量(N_rev_P1、N_rev_P2)和各自写入Packet文件中报文的数量(N_wrt_P1、N_wrt_P2)分别写入Report文件中,并计算读取与写入的百分比(N_wrt_P1/N_rev_P1、N_wrt_P2/N_rev_P2)写入到Report文件。
设计要求
(1) Packet文件要求按照图1所示格式,“序号 [TCP/UDP]:TCP报文段或者UDP报文段首部”,如“1 [TCP]:.... ”(下一次写入需要换行)。Report文件要求按照图1所示格式,如“N_rev_P1:10”(换行);
(2) 实现软件要求可演示,通过应用或者通过测试代码发送测试TCP/UDP报文;
(3) 采用Socket通信机制完成客户端/服务器端数据传输;
(4) 采用C语言在Linux环境下实现,可以采用两个虚拟机分别模拟客户端和服务器端;
(5) 实验报告书写认真,重点突出(建议页数6-8页),每人提交一份,明确自己所做工作,针对自己负责的软件模块不要贴代码,可以有流程图,并给出测试和运行结果;
(6) 代码结构清晰、源文件结构合理,使用本课程所讲的Makefile文件进行编译和维护软件视为加分项。
时间和其它要求
(1) 本次作业要求分组完成,每组人数至多5人,每组提交一份源代码;
(2) 完成的小组,可以在第18周实验课的时候交给老师检查,包括报告(打印版)和程序演示,电子版交班长(班长未选课,选课排最前的学生)汇总之后发给老师,未完成的小组,最迟于第19周交给老师检查;
(3) 注:独立完成,如果存在抄袭等现象,一旦发现视为不及格。
二、完成代码
加QQ:330052999
三、说明
程序中要修改的地方为:文件路径
关于评论中的“段错误:核心已转储”:文件要创建后再运行程序
四、其他
em,其实可以不用libpcab函数库,可以直接使用原始套接字到网卡上抓包,并且只抓IP包即可。
我有时间实现一下。
《Linux编程大作业》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- MySQL学习之变量
变量 MySQL本质是一种编程语言,需要很多变量来保存数据,mysql中很多的属性控制都是通过MySQL中固有的变量来实现的. 系统变量 系统内部定义的变量,系统变量针对的是所有用户(MySQL客户端 ...
- elasticsearch按范围聚合
范围聚合适用于对数据按照指定范围进行分类聚合的应用场景,from和to表示范围起始值的半开半闭区间(包含from值不包含to值),key表示别名 如 {:key=>"2h", ...
- gg_pie
gg_pie gg_pie PeRl 今天尝试了一下用ggplot2画饼图,转换一下极坐标就可以实现,但是和以前画heatmap的时候不一样的是,我们在卷坐标的时候需要让数据集中在一个坐标轴上. 另一 ...
- WebService第二天——WebService框架CXF
一.CXF 1.什么是CXF Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承 ...
- C#使用API屏蔽系统热键和任务管理器
最近做的一个winform类型的项目中需要屏蔽系统热键,在网上搜索了一下,基本上都是调用api来进行hook操作,下面的代码就可以完成功能 using System; using System.IO; ...
- GDAL库简介以及在Windows下编译过程
GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...
- 收集、分析线上日志数据实战——ELK
本文来自网易云社区 作者:田躲躲 用户行为统计(User Behavior Statistics, UBS)一直是互联网产品中必不可少的环节,也俗称埋点.对于产品经理,运营人员来说,埋点当然是越多,覆 ...
- Adobe Photoshop CC2018最新教程+某宝店铺装修教程
PS免费教程,ps淘宝店铺装修教程.该资源为本人从某商网站重金买来,现免费分享给大家,下载地址:百度网盘,https://pan.baidu.com/s/127PjFbGwVVUVce1litHFsw
- 通过 zxing 生成二维码
二维码现在随处可见,在日常的开发中,也会经常涉及到二维码的生成,特别是开发一些活动或者推广方面的功能时,二维码甚至成为必备功能点.本文介绍通过 google 的 zxing 包生成带 logo 的二维 ...
- Qt-QML-Button-ButtonStyle-实现鼠标滑过点击效果
上次实现的自定义的Button功能是用的自定义的Rectangle来实现的,在慢慢的接触了QML之后,发现QML有自己定义的Button 这里盗版贴上Qt帮助文档中的部分关于Button的属性内容 B ...