《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 安装并启动 ...
随机推荐
- 分析nginx 日志常用命令
一.概念 并发连接数 客户端向服务器发起请求,并建立了TCP连接.每秒钟服务器链接的总TCP数量,就是并发连接数.请求数 请求数指的是客户端在建立完连接后,向http服务发出GET/POS ...
- yii学习笔记(1),目录结构和请求过程
最近找找工作面试,发现很多要求会yii.于是准备学习一个新的框架 先在腾讯课堂找了个视频看了一下,然后去网上现在了“归档文件”(还有一种方式是通过php的包管理工具“composer”安装) 归档文件 ...
- 集合之Map
Map:存放键值对,根据键对象找对应的值对象.键不能重复!Map键不能重复,有唯一性,一般通过键找对应的的值Map集合的特点: 1.具有映射关系 2.两列 3.一列要唯一 一列可以重复 键类似于 Se ...
- python--模块之re正则表达式
简介: 正则表达式本身是一个小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配. 正则表达式基础知识: --普通字符匹配自身 abc ----a ...
- linux redhat NFS网络共享搭建
nfs网络共享 测试环境: 服务端:redhat6.7 ip:192.168.1.100 客户端:redhat6.7 ip:192.168.1.110 一.服务端 1.创建共享文件夹 权限666即可 ...
- 常用 Maven 配置
打包为带依赖的 JAR <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEnc ...
- inner join(inner可省) 与 left join 之间的区别
关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在前端以 ...
- Elastic stack ——X-Pack安装
X-Pack是一个Elastic Stack的扩展,将安全,警报,监视,报告和图形功能包含在一个易于安装的软件包中.在Elasticsearch 5.0.0之前,您必须安装单独的Shield,Watc ...
- iOS - Foundation相关
1.NSString A.创建的方式: stringWithFormat:格式化字符串 ,创建字符串对象在堆区域 @"jack& ...
- 一种精准monkey测试的方法
WeTest 导读 相信大家都知道移动端应用的monkey测试吧,不知你们有没有为monkey测试的太过于随机性的特性有过困扰,至少在我们这种界面控件较少且控件位置较偏的app的使用上其测试有效性大打 ...