Linux系统运维脚本:如何查看访问我的linux系统的IP地址,并判断是否有网络攻击?

目                    录

一、需求

二、解决思路

三、实现方式

1、抓一定数量的数据包

2、抓取1小时的数据包

3、以小时为周期,周期性的执行抓包1小时

4,抓包分析并输出结果

5,周期性分析并输出结果

(1)定时设置

(2)命令部分


一、需求

        如果一个Linux网络主机接收到太多来自某个未知IP地址的数据包,可能涉及多种情况,以下是一些可能的原因:

1、网络扫描或探测

        未知IP地址可能正在进行网络扫描或探测,尝试发现主机上的开放端口和服务。这种活动可能用于后续的恶意攻击,如尝试利用已知的漏洞。

2、拒绝服务攻击(DoS/DDoS)

        大量来自同一未知IP地址的数据包可能是拒绝服务攻击的一部分,旨在耗尽主机的资源(如带宽、CPU或内存),导致服务不可用。

3、误配置或网络故障

        在某些情况下,数据包洪流可能只是由于网络配置错误或故障导致的。例如,网络设备可能错误地将流量路由到目标主机,或者主机可能错误地配置了监听大量不必要的流量。

4、僵尸网络活动

        僵尸网络(Botnet)是由大量被恶意软件感染并受远程控制的计算机组成的网络。这些被感染的计算机可能被用来发动大量针对特定目标的攻击,包括发送大量数据包。

5、正常但由于意外而带来的流量

        在某些情况下,大量来自同一IP地址的数据包可能是正常的活动,但是出现了错误的动作。例如,一个合法的用户或服务可能配置不当,导致生成过多的网络流量。

       总之,出现这种情况,基本上是危险的前兆。那么,我们有没有办法通过命令或者脚本等手段,找到这个问题根源呢?

二、解决思路

       要查看网络情况,首先要进行抓包,然后对抓到的数据包进行分析。比如我们可以用最常见的tcpdump进行抓包,然后通过awk,cut等工具对数据包进行分析,最后把所有发过来的数据包筛选出来,统计IP地址相同的包,并显示出来。因此,可以列出如下步骤:
       1、通过tcpdump抓取一定时间的数据包保存下来;

       2、周期性的执行这个命令;

       3、对抓到的数据包进行分析,主要是对源IP地址这部分进行分析;

       4、统计出源IP地址的数量;

       5、对IP地址数量进行排序。      

三、实现方式

1、抓一定数量的数据包

        抓取1万数据包的命令如下:

tcpdump -c 10000 -i eth0

        实际操作效果如下:

[root@ecs-52a1 121yunwei]# tcpdump -c 10000 -i eth0  >/home/pkts.pcap
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10000 packets captured
20172 packets received by filter
8890 packets dropped by kernel
[root@ecs-52a1 121yunwei]#
[root@ecs-52a1 121yunwei]#

2、抓取1小时的数据包

        命令如下:

timeout 1h tcpdump -i eth0 -w /home/pkts.pcap

        为了可以周期性的执行,可以把这个命令保存为shell脚本文件,方便调用,如下:

#!/bin/bash 
# capture_packets.sh 
# 定义抓包文件名称(固定不变,以便后续覆盖) 
PCAP_FILE="/home/pkts.pcap " 
# 执行 tcpdump 抓包一个小时,使用 timeout 命令限制时间,并覆盖之前的文件 
timeout 1h tcpdump -w "$PCAP_FILE" -i eth0

3、以小时为周期,周期性的执行抓包1小时

crontab -e

         内容编辑如下:

*/5 * * * * capture_packets.sh

4,抓包分析并输出结果

        采用如下命令分析结果

awk '{print $3}' /home/pkts.pcap | cut -d. -f 1-4 | sort | uniq -c | sort -nk 1

        测试效果如下:

[root@ecs-52a1 121yunwei]#
[root@ecs-52a1 121yunwei]# awk '{print $3}' /home/pkts.pcap | cut -d. -f 1-4 | sort | uniq -c | sort -nk 111 ecs-52a1.459371 ecs-52a1.496691 ecs-52a1.706012 112.86.84.8830 ecs-52a1.gbjd816324 222.93.149.89
[root@ecs-52a1 121yunwei]#

        根据这个结果,最大的访问量是222.93.149.89过来的访问,只有324个,所以不存在网络攻击。

5,周期性分析并输出结果

        可以生成脚本文件analysis_packets.sh,把命令也写到crontab中,如下

*/5 * * * * capture_packets.sh && sleep 2s && analysis_packets.sh

(1)定时设置

        这个表达式前半部分为定时任务设置,如下:

        */5: 这表示每5分钟执行一次。星号(*)代表任意值,而斜杠(/)后面跟的数字表示间隔。因此,*/5 意味着从0分钟开始,每隔5分钟。

        *: 小时。星号表示“每小时”。

        *: 一个月中的哪一天。星号表示“每天”。

        *: 月份。星号表示“每个月”。

        *: 一周中的哪一天(0代表星期日,1代表星期一,依此类推)。星号表示“每周的每一天”。

        综上,这个定时任务表示:每小时的每5分钟执行后面的命令。

(2)命令部分

       如下为命令部分的解释:

        capture_packets.sh: 这是一个shell脚本,它的功能很可能是捕获网络数据包。

        &&: 这是一个逻辑操作符,表示“如果前一个命令成功执行(返回值为0),则执行后面的命令”。

        sleep 2s: 这个命令会使系统暂停2秒。

        &&: 同上,是逻辑操作符。

        analysis_packets.sh: 这是另一个shell脚本,它的功能可能是分析之前捕获的数据包。

        总结下来,这个 crontab 行的作用是:每小时的每5分钟,执行 capture_packets.sh 脚本捕获数据包,等待2秒,然后执行 analysis_packets.sh 脚本分析数据包。注意,如果 capture_packets.sh 执行失败(返回值不为0),则后续的 sleep 和 analysis_packets.sh 将不会执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基于langchain + streamlit 完整的与文档对话RAG】

本地部署文档问答webdemo 支持 pdf支持 txt支持 doc/docx支持 源文档索引 你的点赞和收藏是我持续分享优质内容的动力哦~ 废话不多说直接看效果 准备 首先创建一个新环境(选择性) conda create -n chatwithdocs python3.11 conda activate chatwith…

封装的echarts子组件使用watch监听option失效的问题

项目场景: 我在项目里面封装了一个echarts组件,组件接收一个来自外部的option,然后我用了一个watch函数去监听这个option的变化,option变化之后,销毁,然后再新建一个charts表 碎碎念 问题如标题所示,这篇…

vue的生命周期有那些

1.v-text 相当于js的innerText <div v-text"姓名&#xff1a;name"></div>const name ref(张三); //声明 2.v-html 相当于js的innerHTML <div v-html"html"></div>const html ref(<s>这是一段文字</s>) 3.v-bin…

pytorch 函数整理

pytorch 函数整理 method_code.init.code.co_argcount&#xff1a;获取method_code.init 函数的输入变量的数目&#xff1b; input_params method_code.init.code.co_varnames&#xff1a;获取method_code.init 函数的输入变量的名称列表&#xff1b; __enter__和__exit__魔…

【Preprocessing数据预处理】之Information Leakage

在机器学习中&#xff0c;当使用来自训练数据集之外的信息来创建模型时&#xff0c;就会发生信息泄露。这可能导致在训练期间过于乐观的性能估计&#xff0c;并且可能导致模型在未见数据上表现不佳&#xff0c;因为它可能无法从训练数据泛化到现实世界。 信息泄露的示例 1. 使…

Element UI +Vue页面生成二维码的方法

目录 一、方法一 采用qrcodejs2生成1.1、安装二维码插件qrcodejs21.2、在vue文件中&#xff0c;引入生成二维码插件1.3、构建二维码对象qrCodeDiv 一、方法二 -采用qrcode生成2.1、安装qrcode2.2、页面引入2.3、方法里边使用2.4、options 三、方法三 vue-qr3.1、安装3.2、页面引…

【论文复现】摩尔线程版AnimateAnyone

code&#xff1a;MooreThreads/Moore-AnimateAnyone (github.com) paper&#xff1a;Animate Anyone (humanaigc.github.io) 1. Inference Inference没啥难度&#xff0c;按照readme来就行&#xff0c;就是分开下载权重比较慢&#xff0c;注意权重文件严格按照文档目录树来放…

自然语言处理: 第十五章RAG(Retrieval Augmented Generation)

论文地址: [2005.11401] Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (arxiv.org) 代码地址: 可以参考百度文心一言为例子&#xff0c;与本文代码无关 本篇文章主要是介绍Retrieval Augmented Generation下文简称RAG技术的实现原理和代码实现以及大体…

【Springboot】--如何将springboot+vue项目部署到云服务器?

目录 一、准备工作 1、购买云服务器 2、获取面板地址 二、jdk和数据库 1、安装环境 2、配置jdk环境变量 3、java版本的问题 4、添加数据库 三、前端部署 1、vue 2、创建站点 ​编辑 四、后端部署 1、application.yml 2、idea打包 3、运行jar包 4、开放端口 五、…

扩散模型基础学习

扩散模型基础学习 AIGC是什么扩散模型的发展VAEGANDDPMstable Diffusion 基于transformer架构的Diffusion模型transformer 参考 AIGC是什么 AIGC&#xff0c;全称AI generated content (人工智能生产内容)&#xff0c;是一种利用AI自动生产内容的生产方式。 其发展依赖以下三个…

25-3 SQL 注入 - 二阶注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、二阶注入介绍 二次注入是一种常见于Web应用程序中的安全漏洞,也被称为SQL二阶注入。相对于一次注入漏洞,二次注入更不易被察觉,但却具有同样危险的攻击潜力。简而言之,二次…

20240309web前端_第一周作业_完成用户注册界面

作业一&#xff1a;完成用户注册界面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

java SSM二手交易网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM厂房管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

C++day2——引用、结构体、类

思维导图&#xff1a; 2、自己封装一个矩形类(Rect)&#xff0c; 拥有私有属性&#xff1a;宽度(width)、高度(height)&#xff0c; 定义公有成员函数初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w)更改高度的函数:set_h(int h) 输出该矩形的周长和面积函…

Mac上使用M1或M2芯片的设备安装Node.js时遇到一些问题,比如卡顿或性能问题

对于Mac上使用M1或M2芯片的设备可能会遇到在安装Node.js时遇到一些问题&#xff0c;比如卡顿或性能问题。这可能是因为某些软件包或工具在M1或M2芯片上的兼容性不佳。为了解决这个问题&#xff0c;您可以尝试以下方法&#xff1a; 1. 使用Rosetta模式 对于一些尚未适配M1或M2…

剧本杀小程序开发:解锁推理乐趣,畅享剧情盛宴

在繁忙的生活中&#xff0c;我们总是期待一份不期而遇的惊喜。今天&#xff0c;就让我们一起打开“盲盒一番赏”小程序&#xff0c;探索那份属于你的独特惊喜吧&#xff01; “盲盒一番赏”小程序&#xff0c;是一个集合了丰富多样的盲盒商品的线上平台。无论你是盲盒控&#…

20240312-1-Graph(图)

Graph(图) 在面试的过程中,一般不会考到图相关的问题,因为图相关的问题难,而且描述起来很麻烦. 但是也会问道一下常见的问题,比如,最短路径,最小支撑树,拓扑排序都被问到过. 图常用的表示方法有两种: 分别是邻接矩阵和邻接表. 邻接矩阵是不错的一种图存储结构,对于边数相对顶点…

Vue3全家桶 - Vue3 - 【4】侦听器

侦听器 一、 组合式API&#xff1a; 1.1 watch()函数 创建侦听器: 语法:// 先导入 watch 函数 import { watch } from vue watch(source, callback, options)source&#xff1a; 需要侦听的数据源&#xff0c;可以是 ref&#xff08;包括计算属性&#xff09;、一个响应式对…

Linux内核介绍and下载

Linux内核介绍and下载 介绍下载下载历史版本 我是将军我一直都在&#xff0c;。&#xff01; 介绍 ● Linux是c语言写成的 ● 符合POSIX标准 ● 作者是芬兰的Linus Torvalds ● 发展依赖于五个重要支柱: unix操作系统、minix操作系统、 GNU计划、POSIX标准和互联网 ● 2.6之后…

打卡--MySQL8.0 二 (用户权限管理)

一、mysql8修改了安全规则&#xff0c;不能像mysql5.7 一次性创建用户并授权&#xff0c;需要分批创建。 1、注意在MySQL8.0版本中创建用户一定要在配置文件中增加如下内容&#xff0c;来兼容旧的程序运行。 default_authentication_pluginmysql_native_password 2、创建用户…