一、要求

作业题目

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编程大作业》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. MySQL学习之变量

    变量 MySQL本质是一种编程语言,需要很多变量来保存数据,mysql中很多的属性控制都是通过MySQL中固有的变量来实现的. 系统变量 系统内部定义的变量,系统变量针对的是所有用户(MySQL客户端 ...

  2. elasticsearch按范围聚合

    范围聚合适用于对数据按照指定范围进行分类聚合的应用场景,from和to表示范围起始值的半开半闭区间(包含from值不包含to值),key表示别名 如 {:key=>"2h", ...

  3. gg_pie

    gg_pie gg_pie PeRl 今天尝试了一下用ggplot2画饼图,转换一下极坐标就可以实现,但是和以前画heatmap的时候不一样的是,我们在卷坐标的时候需要让数据集中在一个坐标轴上. 另一 ...

  4. WebService第二天——WebService框架CXF

    一.CXF 1.什么是CXF Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承 ...

  5. C#使用API屏蔽系统热键和任务管理器

    最近做的一个winform类型的项目中需要屏蔽系统热键,在网上搜索了一下,基本上都是调用api来进行hook操作,下面的代码就可以完成功能 using System; using System.IO; ...

  6. GDAL库简介以及在Windows下编译过程

    GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...

  7. 收集、分析线上日志数据实战——ELK

    本文来自网易云社区 作者:田躲躲 用户行为统计(User Behavior Statistics, UBS)一直是互联网产品中必不可少的环节,也俗称埋点.对于产品经理,运营人员来说,埋点当然是越多,覆 ...

  8. Adobe Photoshop CC2018最新教程+某宝店铺装修教程

    PS免费教程,ps淘宝店铺装修教程.该资源为本人从某商网站重金买来,现免费分享给大家,下载地址:百度网盘,https://pan.baidu.com/s/127PjFbGwVVUVce1litHFsw

  9. 通过 zxing 生成二维码

    二维码现在随处可见,在日常的开发中,也会经常涉及到二维码的生成,特别是开发一些活动或者推广方面的功能时,二维码甚至成为必备功能点.本文介绍通过 google 的 zxing 包生成带 logo 的二维 ...

  10. Qt-QML-Button-ButtonStyle-实现鼠标滑过点击效果

    上次实现的自定义的Button功能是用的自定义的Rectangle来实现的,在慢慢的接触了QML之后,发现QML有自己定义的Button 这里盗版贴上Qt帮助文档中的部分关于Button的属性内容 B ...