ARP欺骗攻击:利用driftnet截获图片数据流

ARP协议原理

地址解析协议,即(Address Resolution Protocol),是根据 IP 地址获取MAC地址的一个TCP/IP协议。

(1)每台主机都会在自己的ARP缓冲区建立一个ARP列表,以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包发送到目的主机时,会先检查自己的ARP列表中是否存在该IP地址对应的MAC地址,如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址,硬件地址,以及目的主机的IP地址。

(2)网络中所有主机收到这个ARP请求之后,会检查数据包中的目的IP是否和自己的IP地址一致,如果不一致就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP列表中已经存在该IP的信息,则将其覆盖,然后将自己的 MAC 地址写入 ARP 响应数据包中发送给源主机,告诉源主机自己是它想要找的 MAC 地址。

(3)源主机收到这个ARP响应数据包之后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

ARP属哪一层?

基于功能来考虑,它的功能最终是获取到MAC信息,服务于链路层,所以是链路层协议;

ARP的作用

① IP数据包不能直接在实际网络中传输。

② IP地址在物理网络中对目标机器的寻址,必须转换为物理地址,即MAC地址。

③ ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

交换环境的网络使用交换机(Switch)连接各个网络节点 。

  • 交换机通过自己的ARP缓存列表来决定把数据报发送到某个端口, 这样就不是把一个数据报转发到所有端口了, 这种做法一方面大大提高了网络的性能, 另一方面也提高了安全性。
  • 在交换环境下, 即使网卡设置为混杂模式, 也只能监听本机的数据包, 因为交换机不会把其他节点的数据报转发给嗅探主机。

ARP 欺骗(ARP Spoofing)

ARP欺骗攻击是利用ARP协议本身的缺陷进行的一种非法攻击,目的是为了在全交换环境下实现数据监听。

通常这种攻击方式可能被病毒、木马或者有特殊目的攻击者使用。

原理:主机在实现ARP缓存表的机制中存在一个不完善的地方,当主机收到一个ARP的应答包后,它并不会去验证自己是否发送过这个ARP请求,而是直接将应答包里的MAC地址与IP对应的关系替换掉原有的ARP缓存表里的相应信息。

ARP的缺陷

  • ARP建立在信任局域网内所有结点的基础上。
  • 优点是高效,但不安全。
  • 无状态的协议,不检查是否发过请求或是否是合法的应答,不只在发送请求后才接收应答。
  • 只要收到目标MAC是自己的ARP请求包或ARP应答包,就接受并缓存。
  • 这样,便为ARP欺骗提供了可能,恶意节点可以发布虚假的ARP报文从而影响网内结点的通信,甚至可以做“中间人”。

ARP欺骗例子

典型ARP欺骗类型之一

欺骗主机作为“中间人”,被欺骗主机的数据都经它中转,以窃取被欺骗主机间的通讯数据。

假设一网络环境中有三台主机分别为A、B、C

A- IP:192.168.10.1 MAC:AA-AA-AA-AA-AA-AA

B- IP:192.168.10.2 MAC:BB-BB-BB-BB-BB-BB

C- IP:192.168.10.3 MAC:CC-CC-CC-CC-CC-CC

B给A应答IP是192.168.10.3 MAC是BB-BB-BB-BB-BB-BB

B给C应答IP是192.168.10.1 MAC是AA-AA-AA-AA-AA-AA

B对A伪装成C,对C伪装成A,A和C都被欺骗了!

典型ARP欺骗类型之二

-截获网关数据,欺骗路由器的ARP表。

-它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常的计算机无法收到信息。

典型ARP欺骗类型之三

-伪造网关,欺骗内网计算机,造成断网。

-建立假网关,让被它欺骗的计算机向该假网关发数据,而不是发给路由器。这样无法通过正常的路由器途径上网,在计算机看来,就是上不了网,即网络掉线或断网了。

ARP攻击

ARP攻击主要是指ARP欺骗,也包括ARP扫描(或称请求风暴),即在网络中产生大量ARP请求广播包,严重占用网络带宽资源,使网络阻塞。ARP扫描一般为ARP攻击的前奏。

ARP攻击主要是存在于局域网中。

ARP攻击一般通过木马感染计算机,ARP欺骗木马只需成功感染一台电脑,就可能导致整个局域网都无法上网,严重的甚至可能带来整个网络的瘫痪。受到ARP攻击的计算机一般会出现的现象:

  • 不断弹出“本机的0-255段硬件地址与网络中的0-255段地址冲突”的对话框。
  • 计算机不能正常上网,出现网络中断的症状。

利用driftnet截获图片数据流

1.安装driftnet

image

2.以网卡模式运行
pS1Lo1x.png

3.捕获图片
pS1OS3t.png

4.将捕获图片保存到指定目录

image

pS1LLHe.png

5.打开ettercap
pS1LjNd.png
pS1LXAH.png

6.将攻击机IP和靶机IP添加到target1和target2中
pS1Lv4A.png

7.启动ARP欺骗模块
pS1Lz9I.png

当靶机在浏览图片的时候,攻击机就嗅探到了靶机浏览的图片:
靶机:
pS1O9jf.png
攻击机:
pS1OpgP.png

再浏览点图片玩一玩:
pS1OPu8.png
pS1OiDS.png

本文转载于网络 如有侵权请联系删除

相关文章

  • CSS3之opacity属性的简单使用

    大家好,又见面了,我是你们的朋友全栈君。什么是opacity?opacity属性设置元素的不透明级别。怎么使用?<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <title> CSS3之opacity属性的简单使用</title> <style> div{ width:100px; height:100px; background-color:red; margin:0auto; /* opacity属性设置元素的不透明级别。 本元素的不透明度是0.5。请注意,文本和背景色都受到不透明级别的影响。 取值范围:从0.0(完全透明)到1.0(完全不透明)。 详细见:http://www.w3school.com.cn/cssref/pr_opacity.asp */ opacity:0.5; } </style> </head> <body> <div

  • Elasticsearch长文本查询拒绝问题分析及性能优化

    问题背景:腾讯云ES客户-某头部在线教育公司在微信群中反馈连续两天在晚上19:30左右业务侧查询ES集群时出现较大面积查询拒绝现象,且查询耗时从原先的100ms以下上涨到900ms以上,如图1所示。图1.客户业务端统计的查询耗时监控排查过程:收到客户反馈后第一时间介入排查,首先查看集群日志,确实出现了大量的查询队列堆积和查询拒绝的现象,如图2所示。图2.集群查询拒绝日志并且从监控中可以看出一个非常明显的规律:从16:00左右开始(学生放学时间?),cpu利用率随着查询流量的上涨不停升高,一直飙升到90%以上,开始出现查询队列堆积和查询拒绝,如图3、4所示。图3.集群单周期查询完成次数监控(次/分)图4.集群最大cpu使用率监控从上面的cpu和查询流量监控趋势图中我们大致判断客户反馈的查询拒绝现象和cpu利用率飙升到90%以上有关,而cpu的暴涨又是由于查询流量的逐步攀升导致,而cpu被打满又反向导致查询请求处理缓慢,加剧了队列的堆积,形成恶性循环。为了验证自己的想法,抓取了当时的热线程,从热线程的火焰图中证明了自己的猜想。GET/_nodes/hot_threads//获取集群节点热线

  • Playwright免登录

    在做自动化的时候,每次都会新打开一个browser,于是得重新登录, 有时候登录是件麻烦且费时间的事情。 以前用webdriver的时候,先登录,存储cookie信息,下次直接带上就行了。 如果用Playwright,该怎么办呢?我们来看命令选项,看有没有解决方案。 选项:-V,--version输出版本号 -b,--browser<browserType>浏览器类型 --color-scheme<scheme>更改主题取值"light"或"dark" --device<deviceName>模拟设备,例如"iPhone11" --geolocation<coordinates>指定地理位置例如"37.819722,-122.478611" --lang<language>指定语言区域"en-GB" --save-storage<filename>保存浏览器状态到指定文件 --load-storage<file

  • 百分点认知智能实验室出品:机器翻译是如何炼成的(上)

    编者按机器翻译作为自然语言处理中最典型的应用,翻译“神器”不断面世,可以说在AI应用领域正当红。那么,机器翻译经历了怎样的开端、泡沫、被判死刑?又怎样冲破藩篱、摒弃语言学,借助神经网络而走红?如果说自然语言处理是人工智能皇冠上的明珠,那么填补了语言鸿沟的就是机器翻译。岁末年初之际,百分点认知智能实验室-翻译组深扒机器翻译史,讲解机器翻译是如何炼成的(上篇)。语言的分歧是使人类大家庭破裂、分化成敌对阵营的唯一原因,或至少是主要原因。——语言学家柴门霍夫文字,是人类为了表达信息而创建的一套符号系统。文字的使用,使人类知识更新的速度产生了翻天覆地的变化,人类通过文字来表达信息、交换信息,一代一代不断积累、升级自己对世界的认知,从而进一步改造世界。其他动物可能比人类身体更强壮、块头更高大、嗅觉更敏锐、听觉更灵敏,视觉更清晰,甚至部分动物也会制造和使用工具。但它们无一例外,都没有创造和使用文字的能力,因此,在进化的漫漫千万年中它们都无法积聚充分的认识世界的知识和改造世界的能力。 文字就像魔法一样,使得柔弱的人类拥有了不断迭代、增强的智慧。但是,使用不同的文字,宛如“鸡同鸭讲”,也造成了人类之间信

  • 002.iSCSI服务端配置

    一iSCSItarget的磁盘种类大型文件单一分区(partition)磁盘数组RAIDLVM二iSCSI创建步骤建立用于共享的磁盘设备(分区/磁盘/文件)创建后备磁盘创建相应的IQN创建相应的规则#(可选)为后备磁盘创建LUN指定侦听的IP和端口#(可选)检查并保存配置防火墙规则开放服务(开机)启动三建立所需磁盘设备3.1建立一个3GB大小的/dev/sdc1作为共享1DeviceBootStartEndBlocksIdSystem 2/dev/sdc120486293503314572883Linux复制3.2建立一个2GB大小的/dev/server/iscsi01LV作为共享使用fdisk创建一个用于共享的LVM分区disk1_lv。1DeviceBootStartEndBlocksIdSystem 2/dev/sdb12048419635120971528eLinuxLVM 3/dev/sdb24196352839065520971528eLinuxLVM 4[root@system1~]#pvcreate/dev/sdb1 5[root@system1~]#pvcreate

  • DNS是什么?有什么用?

    哈喽!各位小伙伴大家好呀!前期文章说过更改IP和DNS,那本期就来了解一下什么是DNS!域名系统(英文:DomainNameSystem,缩写:DNS)好多朋友可能并不明白DNS是什么,但是很多时候都听到别人讲过,或者是在设置固定IP地址的时候看到过,小编这里尽量以最简单易懂的方式给大家聊聊DNS是啥,用处是什么。 DNS是互联网的一项服务,简单的说,就是把域名(简单来说就是网站服务器的名字)转换成IP地址(简单说就是一个电脑的电话号码),好让电脑直接访问到网站的服务器。互联网互相访问是通过IP地址来进行的,就像是打电话一样,如果你需要访问百度的网站,你的浏览器就会给百度服务器打电话,然后说,我要访问你的网站使用搜索服务,然后百度服务器就会接电话说好的呀!你的浏览器上就看到百度的网站了。电脑与服务器之间要建立通信,互相识别,就是通过IP地址,可是我们访问百度的时候是,在浏览器输入的不是IP地址,输入的是baidu.com这种域名。我们并不知道百度的IP地址是多少,可为什么我就输入域名还是访问到了百度的网站呢?重点来了,我们电脑浏览器在访问百度网站的时候,会把我们输入的域名,先交给域名服

  • Docker学习之网络模式配置

    以前搭建过虚拟机(vmware)的小伙伴,有可能知道vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。网络模式显然Docker也支持4种网络模式供大家选择:host模式,使用--net=host指定。container模式,使用--net=container:NAME_or_ID指定。none模式,使用--net=none指定。bridge模式,使用--net=bridge指定,默认设置。host模式众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PIDNamespace隔离进程,MountNamespace隔离文件系统,NetworkNamespace隔离网络等。一个NetworkNamespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的NetworkNamespace隔离。一个Docker容器一般会分配一个独立的NetworkNamespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Netwo

  • 如何修改自增列值以及相应的解决方法

    今天工作中遇到特殊的一个任务,就是将两个自增列值的进行对调变更。SQLServer平台修改自增列值由于之前处理过sqlserver数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL语句修改自增列值,是严格不允许的,直接报错(无法更新标识列’自增列名称‘)。sqlserver我测试是2008、2012和2014,都不允许变更自增列值,我相信SQLServer2005+的环境均不允许变更字段列值。如果非要在SQLServer平台修改自增列值的,那就手动需要自增列属性,然后修改该列值,修改成功后再手动添加自增列属性。如果在生成环境修改自增列的话,建议在空闲时间(零点以后,平台或网站使用的用户很少的时间段)来处理这类问题。数据量大且多表关联的,那就通过T-SQL来变更。该方法最大的缺点就是要通过手工辅助取消和添加自增属性的。还有一个方法,先将要修改的数据整理为T-SQL的插入脚本,再删除这批要修改的数据,在通过显示插入数据来实现。这种方式适用于要变更不较少的单表记录,该方法到时比较灵活的。更简单的方法,那就是如果仅仅若干条,那就让运营人员重新发布信息,删除以前的数据。还有网上通过修过T-

  • DNS实战--1

    DNS(DomainNameSystem,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户方便的访问互联网,而不用去记住能够被机器读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析),DNS协议运行在UDP协议之上,使用端口号53DNS的分布式数据库是以域名为索引的,每个域名实际上就是一颗很大的逆向数中路径,这棵逆向树成为域名空间(domainnamespace)树的最大深度不超过127层,树种每个节点都有一个可以长达63个字符的文本符号。   简单地说就是一个IP地址和域名之间的转换系统,方便用户通过域名访问正确的服务地址,而不用记住不易区分的具体IP。DNS协议运行在UDP协议之上,使用端口53。 以访问www.qq.com为例,当用户在浏览器中输入网址点击回车以后,会经过以下查找IP过程,也就是DNS解析过程: 1)本地计算机host文件 2)如果本地没有解析记录,则开始递归查询本地域名服务器LOCALDNS(也就是你网络中配置的首选和备选DNS) 3)LDNS也没有则会去查询根服务器,并开始迭代查询

  • 网购个人信息保密的建议

    前序:   最近淘宝购物,给了一个中评,于是倒霉了,卖家电话攻击+短信威胁啊。   话说网上有种打牛皮癣小广告的“呼死你软件”,现在被卖家给合理利用上了,不给我好评,我就呼死你。   好吧,我很荣幸的遇到了!!!   淘宝投诉,对面的妹子然提交申请投诉,最后的结果证据不住!   再次打电话问淘宝,对话无奈的说没办法!!   呜啦啦。。万能的淘宝都没办法,我只有自认倒霉了。。 絮叨:   当今网购,物流突飞增长,大跃进的同时也难免有漏洞,程序也有bug呢,嘿嘿。例如,物流丢件,刷单(做TB的有几个不刷单的,TM也不例外,勿喷!), 买的个人信息等等。   我在想物流行业争着搞B2B,O2B的,为什么不在个人信息方面为消费者考虑下哦。 正题:   以下是我对个人信息的一些构思,希望在共创建绿色网购的同时有所帮助。    一:网络编码记录地址信息。    记个之前有种火星文比较横行,淘宝(各种购物平台)可不可以自己定义个文字语言(A语言),将买家的地址编译成A语言,然后快递单记录A语言,这种 A语言允许物流公司编译,这里注意下,编译的时候(汉语-》A语言)有个区

  • 自我介绍➕软工五问

       大家好,我是计科五班的肖文恒,由于大一学习比较松懈,对于计算机的基础知识没有学好,导致自己的能力有所不足,经过大二一年的学习以及对计算机各方面的了解,感觉自己对所学还是有所掌握,但还是要学习好课程的知识和更多的实践,才能有更好的能力。 1.第三章的需求分析中建模等工作是否就是产品经理所要做的? 2.有穷状态机跟数字逻辑中的状态转换有什么不同? 3.Z语言中的集合可以有多个吗? 4.Jackson图可否通过在斜线上标明S(i)达到与改进后一样的效果? 5.根据基本路径测试所计算出的程序的环境复杂度,可否设计不止一种执行路径?

  • SAP ERP ECC 升级 ECC EhP8 升级技术要求

       SAPERP6.0EHP8升级   SAPECC6.0EHP8升级 SAPERPECC升级ECCEhP8升级技术要求   Unicode要求     Ref link   wechat:ywkonline Mobile:13661767749 专注于SAP运维、升级、迁移

  • python下载脚本

    #/usr/bin/envpython#coding:UTF-8importtimeimportos,sysimporturllib2url='http://downloaduat.laocaibao.com/front/front.war'tm=time.strftime('%Y%m%d',time.localtime(time.time()))warname='front.war'downdir='/home/deployer/update/'defdownloadbag():   print'''         开始下载新的文件包front.war         下载地址:http://downloaduat.laocaibao.com/front/front.war        &nbs

  • ccf-201512-2 消除类游戏

    问题描述   消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。  现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。  请注意:一个棋子可能在某一行和某一列同时被消除。 输入格式   输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。  接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出格式   输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 样例输入 4522312345142321322244 样例输出 22302345042320300044 样例说明   棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 样例输入 4522312311112321

  • Codeforces Round #626 Div2 D,E

      比赛链接: CodeforcesRound#626(Div.2,basedonMoscowOpenOlympiadinInformatics) D.Present 题意: 给定大小为$n$的a数组,求下面式子的结果: $$(a_1+a_2)\oplus(a_1+a_3)\oplus\ldots\oplus(a_1+a_n)\\\oplus(a_2+a_3)\oplus\ldots\oplus(a_2+a_n)\\\ldots\\\oplus(a_{n-1}+a_n)\\$$ 分析: 这题看了题解补的 分别求结果的第$k$(以0开始计数)位是否为1 显然,我们不需要关心每个数第$k$位以上是什么,那么对数组取模$2^{k+1}$ 两个数的和的第$k$位为1时,才对答案的第$k$位有贡献,那么和的第$k$位为1需要属于$[2^k;2^{k+1})$或者$[2^{k+1}+2^k;2^{k+2}-2]$,求出这样的和的对数,如果对数为奇数,那么答案的第$k$位为1,否则为0 求对数可以用二分查找来求   AC代码: #include<bits/stdc++.h

  • switch(面试)

    publicstaticvoidOutput() { inti=10; while(i!=0) { i--; switch(i) { case1: Console.WriteLine(i.ToString()); break; case2: Console.WriteLine(i.ToString()); break; default: Console.WriteLine(i.ToString()); return; } } }复制 结果为9 至于在switch中使用break还是return的结果是:   break是直接退出switch语句;   return是退出函数;

  • 关于 MonoDevelop on Linux 单步调试问题的解决

    在MonoDevelop中默认是关闭对外部程序集(.dll)的调试,可通过如下步骤来解决这个问题。 通过菜单【Edit】-【Preferences】-【Debugger】进入到调试器的设置页,把“Debugprojectcodeonly;donotstepintoframeworkcode.”选项取消。 如果你的应用是个控制台程序,还需要进入到该项目(鼠标右击该项目,在弹出菜单中选择“Options”)的【运行】设置页中,将“运行于外部控制台”的设置项取消掉。 但是,就算这样也无法单步调试进入到外部程序集,原因是还缺少Mono的调试符文件,即(*.dll.mdb)文件。所以还需要将所有待调试的外部程序集文件对应的.mdb文件拷贝到当前Host项目的“bin/Debug”目录中。注意:如果外部程序集更新了代码,记得再同步拷贝一次对应的.mdb文件过来。 每次都手动复制还是很痛苦的,尤其是外部程序集较多的时候,所以创建一个复制脚本还是很有必要的。在Host项目的目录中创建一个名为:deploy.sh的脚本文件,使用命令:videploy.sh 然后在vi编辑器的第

  • 布隆过滤器

    布隆过滤器 面试被问到了海量数据处理相关的问题。然后发现了布隆过滤器这个数据结构,学了一下,结果就是这是acm里面用过的算法。 我把布隆过滤器分解为两个模块,也就是多次哈希+bitset。 多次哈希用来优化时间,bitset优化了空间。 时间复杂度上的原理 我们想想哈希这个算法有什么有什么缺点?当然是哈希冲突。 哈希冲突是无法避免的,所以我们得想个法子降低发生哈希冲突的概率。 我们假设现在有\(n\)种算法某一种哈希算法发生冲突的概率为\(p_i\),那么对于一组数据我们把\(n\)种算法全用上。那发生冲突的概率是多少?所有概率之积,这样的话冲突的概率就大大降低了。 空间复杂度上的优化 布隆过滤器可以高效的检验出某一数据是否在海量数据集合中。而在或者不在是两种状态,我们可以用一个bool数组存一下,C++中的bool是1个字节8位的,这已经很不错了。但是C++提供了更好的容器——bitset。它只需要1位。 这种用法就是网上常说的位图。 衍生:如果我们想要求出现2次的数据怎么办?用两个bitset。10表示出现两次,11表示出现三次及三次以上。 代码 现在这个代码就极为清晰了。 cla

  • MyBatis 注解方式批量插入数据库

    @Insert({ "<script>", "insertintotable_name(column1,column2,column3)values", "<foreachcollection='Listmap'item='item'index='index'separator=','>", "(#{item.实体属性1},#{item.实体属性2},#{item.实体属性3})", "</foreach>", "</script>" }) intinsertContract(@Param(value="Listmap")List<Map<String,Object>>pmap);复制 collection:指定要遍历的集合(三种情况list,array,map)!!!!在这种使用注解sql的情况下,这里请填写mapper方法中集合的名称 item:将当前遍历出的元素赋值给指定的变量(相当于for循环中的i) separator:每个元素之间的分隔符 index:索引。遍历list的时候是index就是索引,i

  • SpringCloud统一环境配置需要注意点

      条件: 目前你有两个环境: test、dev而且在本地的bootstrap.yml没有配置Eureka的端口   在某个时刻Eureka的端口修改了,从理论上来看,我们只要修改git中的环境就能应付。 但是结果却不能实现。 最好将Eureka的配置放在本地的yml中 因为git的多种环境会融合    

  • “美登杯”上海市高校大学生程序设计邀请赛补题

    “美登杯”上海市高校大学生程序设计邀请赛补题 传送门 A题 题目吓人,实际上就是求子串的个数。长度为n的字符串子串个数为(n+1)*n/2 #include<bits/stdc++.h> usingnamespacestd; #definefinfreopen("in.txt","r",stdin) #definefoutfreopen("out.txt","w",stdout) #definerep(i,a,n)for(inti=a;i<n;i++) #definesca(x)scanf("%d",&x) #definesca2(x,y)scanf("%d%d",&x,&y) #definesca3(x,y,z)scanf("%d%d%d",&x,&y,&z) #definescl(x)scanf("%lld",&x) #definescl2(x,y)scanf("%lld%lld",&x,&y) #definescl3(x,y,z)scanf("%lld%lld%lld",&x,&am

相关推荐

推荐阅读