《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 安装并启动 ...
随机推荐
- go语言学习(一):数组/切片
学习区块链之后,发现还要学习加密,接触到的视频是:Go的crypto包,所以开始接触Go.因为和solidity有些相似,但是比solidity简单一些,就开始放松的心态去学习.每天翻着go菜鸟教程, ...
- Ruby中类的进阶(继承,private, public, protect)
类中的public,protect,private public method class Point def test end end 这样定义的test方法就是一个public方法可以在类内外使用 ...
- 解决WinScp连接被拒绝的问题
尝试以下方法: 1) 开启|关闭防火墙(这里需要关闭) sudo ufw enable|disable 2) 开启远程服务 在终端界面输入:service sshd start.结果显示:ssh:un ...
- 解决protobuf import路径的问题
网上关于protobuf import的文章不太详细,有些问题说的不全,比如import时的路径是在哪个目录中搜索的,比如: 我有一个这样的目录结构,我怎么在demo2/protoDemo2.prot ...
- 使用idea上传项目到gitHub
上传项目到gitHub 创建好后开始提交本地项目代码如图: 选中VCS选中图中的按钮如图所示: 然后再选中Src点中add按钮如图所示: 然后点中commit Directory后 打开终端进行项目根 ...
- 利用主成分分析(PCA)简化数据
一.PCA基础 线性映射(或线性变换),简单的来说就是将高维空间数据投影到低维空间上,那么在数据分析上,我们是将数据的主成分(包含信息量大的维度)保留下来,忽略掉对数据描述不重要的成分.即将主成分维度 ...
- postgresql 日期类型处理实践
---- 日期+1 select date '2018-01-14' + integer '1'; 结果: 2018-01-15 ---- 日期+1 后 转 20180101 日期字符串 select ...
- 20145202马超《网络对抗》Exp6 信息搜集与漏洞扫描
本实践的目标是掌握信息搜集的最基础技能.具体有(1)各种搜索技巧的应用(2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点(4)漏洞扫描:会扫 ...
- 佛山Uber优步司机奖励政策(12月28日到1月3日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- spring源码-BeanFactoryPostProcessor-3.2
一.BeanFactoryPostProcessor这个是spring容器的拓展之一,其目的是在容器初始化完成之前,通过beanFactory对上下文进行进行操作. 二.常用场景,需要对beanDef ...