深入剖析pcap中的网络异常:TTL过期攻击、ARP中毒、TCP重传与重叠碎片等
网络流量数据包捕获是网络安全领域的重要部分,而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量,我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题,及时发现异常活动,保护我们的网络安全。
在处理pcap文件时,我们主要关注的是那些可能表明潜在威胁的特征。例如,TTL(Time To Live)过期攻击是一种常见的网络攻击方式,除此之外,ARP(Address Resolution Protocol)中毒也是一种常见的网络威胁,TCP重传是一种利用TCP协议缺陷进行的攻击,重叠碎片攻击是一种利用IP分片漏洞进行的攻击,除了以上提到的几种攻击方式外,我们还需要关注多个TTL值的问题等等。
TTL过期攻击
- TTL(Time to Live)是IP包中的一个字段,它表示数据包在网络中能够存活的最长时间,一般以秒为单位。当一个数据包经过一个路由器时,该路由器会将数据包的TTL字段减1,当TTL减为0时,路由器会丢弃该数据包。
- TTL过期攻击是指攻击者发送大量的IP数据包,并设置TTL为较小的值,以达到消耗目标主机资源的目的。这类攻击主要是利用目标主机处理TTL减少的数据包需要耗费更多的处理资源,从而导致目标主机的性能下降甚至崩溃。
- 应对策略:网络管理员可以通过设置防火墙等安全设备,限制传入的TTL值,并进行流量监控和流量分析,及时发现异常流量并采取相应的措施。
ARP中毒
- ARP协议(Address Resolution Protocol)是将IP地址解析成MAC地址的一种协议。ARP中毒攻击是指攻击者伪造ARP响应包,欺骗目标主机与攻击者主机之间的通信流量。攻击者通常会向目标主机发送虚假的ARP响应包,将目标主机的IP地址与攻击者的MAC地址绑定,从而导致目标主机的通信流量被重定向到攻击者主机。
- 应对策略:网络管理员可以使用安全工具对局域网中的ARP响应进行检测和监控,定期清除异常的ARP缓存,限制ARP协议的使用,以及使用静态ARP表进行MAC地址与IP地址的绑定。
TCP重传与重叠碎片
- TCP重传是指在数据包传输过程中,某个数据包丢失或未及时到达目标主机,发送方会重新发送该数据包。TCP重叠碎片是指MTU(Maximum Transmission Unit)大小限制导致的数据包分片,在发送方和接收方之间重新组装的过程中,发生了重叠。
- TCP重传和重叠碎片可能会导致网络延迟增加、传输速率降低,甚至数据丢失。
- 应对策略:网络管理员可以通过调整TCP的超时重传时间、优化网络拓扑结构和路径,或通过升级硬件设备来减少重传和重叠碎片的发生。
多个TTL值的识别与应对
- 在进行数据包分析时,可能会遇到多个不同的TTL值,这可能是由于同一个数据包经过了不同的网络节点。识别多个TTL值可以帮助定位网络中的故障点或恶意行为。
- 应对策略:网络管理员可以使用网络监控工具进行数据包的抓取和分析,识别不同TTL值的源头和节点,进而定位异常的网络流量和行为,采取相应的防御措施。
深入剖析pcap中的网络异常:TTL过期攻击、ARP中毒、TCP重传与重叠碎片等(C/C++代码实现)
void my_packet_handler(u_char *args,const struct pcap_pkthdr *header,const u_char *packet);
int help();
void activate_verbose();
void activate_debug();
void activate_linux_cooked();
void analysis(char* file_in, char* file_out);
void print_flag(int flag);
void print_flag_json(FILE *fp, int flag);
void exclude(char* excl);
void save_json(char* filename);/* Ethernet header */
struct sniff_ethernet {u_char ether_dhost[D_HOST_MAC_ADDR]; /* destination host address */u_char ether_shost; /* source host address */u_short ether_type; /* IP? ARP? RARP? etc */
};/* IP header */
const struct sniff_ip *ip_layer;
struct sniff_ip {u_char ip_vhl; /* version << 4 | header length >> 2 */u_char ip_tos; /* type of service */u_short ip_len; /* total length */u_short ip_id; /* identification */u_short ip_off; /* fragment offset field */u_char ip_ttl; /* time to live */u_char ip_p; /* protocol */u_short ip_sum; /* checksum */struct in_addr ip_src,ip_dst; /* source and dest address */
};typedef uint32_t tcp_seq;struct sniff_tcp {u_short th_sport; /* source port */u_short th_dport; /* destination port */tcp_seq th_seq; /* sequence number */tcp_seq th_ack; /* acknowledgement number */u_char th_offx2; /* data offset, rsvd */u_char th_flags; /* flags */u_short th_win; /* window */u_short th_sum; /* checksum */u_short th_urp; /* urgent pointer */
};struct Session {struct MAC_address *last_mac_src, *last_mac_dst;char ip_src[20], ip_dst[20];int port_src, port_dst;long int seq_keepalive;char hash_src[SHA_DIGEST_LENGTH*2+1];char hash_dst[SHA_DIGEST_LENGTH*2+1];struct TCP_Packet *last_p;struct TCP_Packet *first_p;struct Session *previous_s;struct TTL *last_ttl;
};struct TCP_Packet {char hash_src[SHA_DIGEST_LENGTH*2+1];char hash_dst[SHA_DIGEST_LENGTH*2+1];long int ack, seq;int number, flags, len, ttl;bool keepalive, retransmitted;struct TCP_Packet *next_p;
};struct MAC_address {char address[20];struct MAC_address *previous_mac;
};struct TTL {int val;struct TTL *previous_ttl;
};...int nbr_digits(int a) {/** 返回一个相对较小的正整数中的位数*/if (a<0) return -1;if (a<10) return 1;if (a<100) return 2;if (a<1000) return 3;if (a<10000) return 4;if (a<100000) return 5;if (a<1000000) return 6;if (a<10000000) return 7;if (a<100000000) return 8;if (a<1000000000) return 9;if (a<10000000000) return 10;return -1;
}void sha(char ip[20], int port, char* hash_string) {/** Returns sha1(<ip>, <port>) in <hash_string>*/unsigned char hash[SHA_DIGEST_LENGTH];char port_str[nbr_digits(port)];sprintf(port_str, "%d", port);SHA_CTX ctx;SHA1_Init(&ctx);SHA1_Update(&ctx, ip, strlen(ip));SHA1_Update(&ctx, port_str, strlen(port_str));SHA1_Final(hash, &ctx);for (int i = 0; i < SHA_DIGEST_LENGTH; i++) {sprintf(&hash_string[i*2], "%02x", (unsigned int)hash[i]);}
}void add_packet_to_session(struct Session *s, struct TCP_Packet *new_packet, char mac_src[20], char mac_dst[20]) {
...if (s->seq_keepalive==0) {struct TCP_Packet* previous = s->last_p;while (previous != NULL && strcmp(new_packet->hash_src, previous->hash_src) != 0) {previous = previous->next_p;}if (previous != NULL) {if (previous->seq-1 == new_packet->seq && new_packet->len==0 && new_packet->flags == TH_ACK) {new_packet->keepalive = true;s->seq_keepalive = new_packet->seq;}}} else {if (new_packet->seq == s->seq_keepalive && new_packet->flags == TH_ACK && new_packet->len == 0) {new_packet->keepalive = true; // KeepAlive} else if (new_packet->ack == s->seq_keepalive+1 && new_packet->flags == TH_ACK) {new_packet->keepalive = true; // KeepAlive ACK}}
...while (m_dst!=NULL) {if (strcmp(m_dst->address, mac_dst)==0) {found_mac_dst=true;break;}m_dst=m_dst->previous_mac;}while (m_src!=NULL) {if (strcmp(m_src->address, mac_src)==0) {found_mac_src=true;break;}m_src=m_src->previous_mac;}// 检查不同的TTL值
...// 如果数据包的MAC地址不在会话的MAC地址中,请将其添加到MAC地址列表中
...// 如果找不到TTL,请将if添加到TTL列表中if (!found_ttl) {new_ttl = (struct TTL*)malloc(sizeof(struct TTL)); // allocate TTL struct in heapnew_ttl->previous_ttl = s->last_ttl;new_ttl->val = new_packet->ttl;s->last_ttl = new_ttl;}
}
void exclude(char* excl)
{
...while (pt != NULL) {if (strcmp(pt, "ret")==0) {EXCLUDE_RET=true;printf(GRN "[INFO]" RESET " Excluding RET ambiguities\n");} else if (strcmp(pt, "ttl")==0) {EXCLUDE_TTL=true;printf(GRN "[INFO]" RESET " Excluding TTL ambiguities\n");} else if (strcmp(pt, "mac")==0) {EXCLUDE_MAC=true;printf(GRN "[INFO]" RESET " Excluding MAC ambiguities\n");} else {printf(RED "[ERROR]" RESET " Unexpected 'exclude' value: %s\n", pt);help();exit(1);}pt = strtok (NULL, ",");}
}int main(int argc, char **argv)
{
...int long_index = 0;while ((opt = getopt_long(argc, argv,"hvdlxs", long_options, &long_index)) != -1) {switch (opt) {case 'h': help();break;case 'v': activate_verbose();break;case 'd': activate_debug();break;case 'l': activate_linux_cooked();break;case 'x':if (optarg==NULL) {exclude(argv[optind++]);} else {exclude(optarg);}break;case 's':if (optarg==NULL) {printf("OPT: %d %s\n", optind, argv[optind]);if (strlen(argv[optind])>45) {printf(YLW "[ERROR]" RESET "Please choose a shorter filename where to save the results..\n");exit(1);}strncpy(file_out, argv[optind], strlen(argv[optind]));optind++;} else {printf("OPT: %d %s %ld\n", optind, optarg, strlen(optarg));if (strlen(optarg)>45) {printf(YLW "[ERROR]" RESET "Please choose a shorter filename where to save the results..\n");exit(1);}strncpy(file_out, optarg, strlen(optarg));}save_json(file_out);break;default: return help();}}
...// 检查参数中的pcap文件if (arg_nbr==-1) {printf(RED "[Error]" RESET " Missing capture file\n!");return help();}printf(GRN "[INFO]" RESET " Parsing pcap file...\n");pcap_t *handle = pcap_open_offline(argv[arg_nbr], errbuf); if(handle == NULL){printf(RED "[ERROR]" RESET " %s\n", errbuf);help();exit(1);}pcap_loop(handle, 0, my_packet_handler, NULL); analysis(argv[arg_nbr], file_out);return 0;
}
If you need the complete source code, please add the WeChat number (c17865354792)
编译运行:
ARP中毒在于欺骗主机,让其相信我们是默认网关。受害者定期向默认网关询问其MAC地址(ARP协议)。但攻击者可以向受害者发送数据包,说明默认网关位于另一个MAC地址(例如,攻击的MAC地址)。攻击者只需要“定期”发送这些数据包,这样受害者就可以“丢弃”来自默认网关的真实消息。
TCP重传,在TCP连接中发送的每个数据字节都有一个相关的序列号。这在TCP标头的序列号字段中指示。
当接收套接字检测到传入的数据段时,它会使用TCP标头中的确认号来指示接收。发送数据包后,发送方将启动可变长度的重传定时器。如果在定时器到期之前没有收到确认,则发送方将认为该段已丢失,并将重新发送。
当另一个数据包拥有与当前数据包相同的确认和序列号时,我们可以看到TCP重传。
TTL过期攻击: IP数据包的生存时间(TTL)字段对应于该数据包在被路由器丢弃之前“允许”在网络中传播的时间。它是一个8位值,通常在每跳一次时减少一个。
JSON format:
总结
网络异常是指网络通信过程中出现的不正常的情况,其中包括TTL过期攻击、ARP中毒、TCP重传与重叠碎片、多个TTL值的识别与应对等问题。
综上所述,深入剖析pcap中的网络异常需要结合网络原理、协议知识和数据包解析技术,以及对常见的网络故障排除方法的理解。这样才能有效地分析并解决网络异常问题。
Welcome to follow WeChat official account【程序猿编码】
相关文章:
深入剖析pcap中的网络异常:TTL过期攻击、ARP中毒、TCP重传与重叠碎片等
网络流量数据包捕获是网络安全领域的重要部分,而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量,我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题…...
网站被挂黑链怎么办
网站被挂黑链这种事情总是防不胜防,且不说网站本身的安全防护做的是否到位,但只要被盯上了就难逃厄运。即使是企业机构的网站也难逃被黑的经历,更何况用户苦心经营的网站,因此首先需要正确看待挂黑链这个现象,网站被挂…...
WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现
在现代应用程序设计中,一个漂亮的WPF导航界面不仅为用户提供视觉上的享受,更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍: 首先,引人入胜的首页界面是用户与软…...
[技术杂谈]使用VLC将视频转成一个可循环rtsp流
通过vlc播放器,将一个视频转成rtsp流,搭建一个rtsp服务器。rtsp客户端可访问这个视频的rtsp流。 1. 打开vlc播放器,使用的版本如下 2. 菜单:媒体 ---> 流 3. 添加视频文件,点击添加一个mp4 文件 4. 选择串流&…...
手机上连网络转接app,电脑连接手机,共用网络转接app的办法
方法一,(不推荐) 因为太简单了所以写一下 电脑安装MuMu模拟器,之后安装网络转接app,这个模拟器设置了从电脑上安装app和,安卓与电脑同步文件夹功能,实现文件共享。所以直接用就可以了。 方法二…...
k8s中的容器探针
pod的容器健康检查---探针 probe:k8s对容器执行的定期检查,诊断。 探针的三种规则 所有的探针都是针对容器不是针对pod 1、 存活探针---livenessProbe:探测容器是否正常运行。如果发现探测失败,会杀掉容器。容器会根据重启策略…...
4.6 BOUNDARY CHECKS
我们现在扩展了tile矩阵乘法内核,以处理具有任意宽度的矩阵。扩展必须允许内核正确处理宽度不是tile宽度倍数的矩阵。通过更改图4.14中的示例至33 M、N和P矩阵,图4.18创建了矩阵的宽度为3,不是tile宽度(2)的倍数。图4.…...
Java集合-LinkedList
Java集合-LinkedList 特性 public class LinkedList<E> extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable1、继承于 AbstractSequentialList ,本质上面与继承 AbstractList 没有什么区别…...
2023年阿里云云栖大会:前沿技术发布与未来展望
在2023年的阿里云云栖大会上,我见证了云计算和人工智能领域的又一历史性时刻。这次大会不仅是对未来科技趋势的一次深入探索,更是阿里云技术实力和创新能力的集中展示。 首先,千亿级参数规模的大模型通义千问2.0的发布,无疑将人工…...
houdini microscope
【英文原版-无字幕】Wavelets: a mathematical microscope 小波变换最好的入门教程了吧!_哔哩哔哩_bilibili 只涉及模拟,不模拟具体对错...
Linux_CentOS_7.9配置时区及NTPdate同步之简易记录
前言:ntpdate命令来自英文词组”NTPdate“的拼写,其功能是用于设置日期和时间。ntpdate命令能够基于NTP协议设置Linux系统的本地日期和时间,利用NTP服务的时钟过滤器来选择最优方案,大大提高了可靠性和精度,让系统时间…...
十九:爬虫最终篇-平安银行商城实战
平安银行商场实战 需求 获取该商城商品信息 目标网址 https://m.yqb.com/bank/product-item-50301196.html?mcId1583912328849970&loginModepab&historyy&sceneModem&traceid30187_4dXJVel1iop详细步骤 1、寻找数据接口 2、对比payload寻找可疑参数 3、多…...
解决vcruntime140_1.dll无法继续执行代码的方法,一键修复dll文件丢失问题。
vcruntime140_1.dll是Windows操作系统中的一个重要的动态链接库文件,它与Microsoft Visual C Redistributable相关联。电脑出现关于vcruntime140_1.dll无法继续执行代码的错误弹窗是就意味着这个文件在电脑中被破坏导致丢失了,这将会影响一些程序不能正常…...
Elasticsearch:结合 ELSER 和 BM25 文本查询的相关搜索
Elastic Learned Spare EncodeR (ELSER) 允许你执行语义搜索以获得更相关的搜索结果。 然而,有时,将语义搜索结果与常规关键字搜索结果相结合以获得最佳结果会更有用。 问题是,如何结合文本和语义搜索结果? 首先,让我…...
海外社媒运营为什么需要选择优质IP代理?
跨境电商卖家尤其需要关注海外社媒运营,想要更好地运营Instagram、Facebook、TikTok 或 Twitter等,挖掘社媒潜力需要采取战略方法,而社交媒体IP代理在这一活动中发挥着至关重要的作用,下面为你详细介绍。 一、社交媒体代理IP及其运…...
Java中的性能优化:深入剖析常见优化技巧
引言 在现代软件开发中,性能优化是一个至关重要的话题。Java作为一门强大而广泛使用的编程语言,也需要开发者关注和优化性能,以确保应用程序能够在各种场景下高效运行。本文将深入剖析Java中的一些常见性能优化技巧,为开发者提供…...
k8s的yaml文件中的kind类型都有哪些?(详述版Part2/2)
目录 综述 分块详述 13、ConfigMap 14、Secret 15、Ingress 16、StorageClass 17、Namespace 18、ServiceMonitor 19、HorizontalPodAutoscaler 20、NetworkPolicy 21、CustomResourceDefinition 22、Role 23、ClusterRole 24、ClusterRoleBinding 25、RoleBindi…...
什么是API网关代理?
带有API网关的代理服务显着增强了用户体验和性能。特别是对于那些使用需要频繁创建和轮换代理的工具的人来说,使用 API 可以节省大量时间并提高效率。 了解API API(即应用程序编程接口)充当服务提供商和用户之间的连接网关。通过 API 连接&a…...
AWS Simple Email Service (SES) 实战指南
Amazon Simple Email Service (SES) 是一项强大的电子邮件发送服务,适用于数字营销、应用程序通知以及事务性邮件。在这个实战指南中,我们将演示如何设置 AWS SES 并通过几个示例展示其用法。 设置 AWS SES 1. 创建 AWS 账户 首先,您需要创…...
详解Oracle数据库的启动
Oracle数据库的启动,其概念可参考Overview of Instance and Database Startup。 其过程可参见下图: 当数据库从关闭状态进入打开数据库状态时,它会经历以下阶段。 阶段Mount状态描述1实例在没有挂载数据库的情况下启动实例已启动ÿ…...
2024年跨境电商上半年营销日历,建议收藏
2024年伊始,跨境电商开启新一轮的营销竞技,那么首先需要客户需求,节假日与用户需求息息相关,那么接下来小编为大家整理2024上半年海外都有哪些节日和假期?跨境卖家如何见针对营销日历选品,助力卖家把握2024…...
Go采集1688网站数据对比商品价格
最近看了下多多和1688的一些商品价格,发现好多店铺都是无货源拿货一件发货,这就导致层层叠加价格翻了不知道几倍,真所谓多花钱办的事还是一样,因此,今天我就通过一个爬虫程序监控对应商品价格,了解行业龙头…...
Java泛型:灵活多变的类型参数化工具
👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、泛型1、什么是泛型2、泛型的语法 二、泛型类的使用1、泛型类的语法2、泛型如何编译的2.1、擦除机制2.2、为什么不能实例化泛…...
java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…...
蓝凌EIS智慧协同平台 ShowUserInfo.aspx sql注入漏洞
漏洞描述: 蓝凌EIS智慧协同平台是一个简单、高效的工作方式专为成长型企业打造的沟通、协同、社交的移动办公平台,覆盖OA、沟通、客户、人事、知识等管理需求,集合了非常丰富的模块,满足组织企业在知识、项目管理系统建设等需求的…...
React Hooks的useState、useRef使用
React Hooks 是 React 16.8 版本引入的新特性,它允许你在不编写 class 的情况下使用 state 和其他 React 特性。其中,useState 和 useRef 是两个常用的 Hooks。 1. useState useState 是一个允许你在函数组件中添加 state 的 Hook。 使用说明…...
Linux--防火墙,实验案例:基于区域、服务、端口的访问控制
实验环境 某公司的Web服务器,网关服务器均采用Linux CentOS 7.3操作系统,如图2.13所示。为了 加强网络访问的安全性,要求管理员熟悉firewalld防火墙规则的编写,以便制定有效、可行的主机防护策略。 需求描述 > 网关服务器ens3…...
C++学习笔记(二十八):c++ 静态库及动态库的使用
静态库的使用 库的使用会很大程度减少我们的工作,本节对c中静态库和动态库的使用进行简单的介绍。静态链接库意味着这个库会被放到可执行文件中,在生成的exe中。动态链接库是在程序运行时链接的,可以在程序运行时调用加载库函数的方法来实现&…...
uniapp最简单的底部兼容安全区域显示
效果图: 1.html写上动态padding-bottom <view class"button-wrap" :style"padding-bottom:bottomPaddingrpx"><view class"com-btn cencel-btn">取消</view><view class"com-btn confirm-btn " cl…...
图像去噪——CBDNet网络训练自己数据集及推理测试,模型转ONNX模型(详细图文教程)
CBDNet 主要由两个子网络组成:噪声估计子网络和去噪子网络。噪声估计子网络用于估计图像的噪声水平,而去噪子网络用于去除图像中的噪声。 CBDNet 的优势在于: 它采用了更真实的噪声模型,既考虑了泊松-高斯模型,还考虑…...
wordpress readme/全国防疫大数据平台
那Swing的话就是那么样哪。如JTextField jtfnew JTextField(40);你要从文本框提取数据就用jtf.getText()但的确获得的是String型的,java中Interger类封装了一个静态方法parseInt(String s)就用Interger.parseInt(jtf.getText.trim())//这个就可以获取文本框的内容,t…...
罗湖商城网站设计价格/nba西部排名
企业资源计划(ERP)系统是一种集成了所有企业业务流程的管理软件。它可以帮助企业管理和监控所有业务流程,包括财务、采购、库存、销售、人力资源等等。由于它的重要性,越来越多的企业开始意识到ERP系统的必要性,并且开…...
wordpress空间服务商/如何进入网站
//下载libevent扩展文件压缩包(在当前系统哪个目录下载随意) ~# wget http://pecl.php.net/get/libevent-0.1.0.tgz//解压文件 ~# tar -zxvf libevent-0.1.0.tgz//进入源码目录 ~# cd libevent-0.1.0///运行phpize命令,写全phpize的路径 ~# /…...
ui设计的网站/企业seo如何优化
下载源码和示例1 原理:启动一个线程来刷时间,缺点是不太精确,可能跟线程的优先级有关系。会有0-10ms的误差。精确到0.1s是没有问题的。packagetimer;publicclassTimer ...{ private long interval; // private boolean enabled; pri…...
查询网站用什么做的/查看浏览过的历史记录百度
本文将带你了解Android应用开发arcgis for android 实现绘图功能,希望本文对大家学Android有所帮助。<一:实现绘图功能的思路1:首先需要一个点击地图的一个监听函数,可以实现点击地图画点、线、面。arcgis提供一个MapOnTouchLi…...
网站建设的展望/win10系统优化软件
SSH 登录太慢可能是 DNS 解析的问题,默认配置下 sshd 初次接受 ssh 客户端连接的时候会自动反向解析客户端 IP 以得到 ssh 客户端的域名或主机名。如果这个时候 DNS 的反向解析不正确,sshd 就会等到 DNS 解析超时后才提供 ssh 连接,这样就造成…...