小知识积累二

ab命令原理

Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。Apache附带的ab工具(使用的PHP环境是WAMP集成环境,)非常容易使用。ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,因此是某些DDOS攻击之必备良药,老少皆宜。自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)

示例命令:

ab -n 800 -c 800 http://wangshuai.tech/
(-n发出800个请求,-c模拟800并发,相当800人同时访问,后面是测试url)

ab -t 60 -c 1000 http://wangshuai.tech/
在60秒内发请求,一次1000个请求。

压力测试的几个重要指标

Concurrency Level: 100  //并发请求数
Time taken for tests: 50.872 seconds  //整个测试持续的时间
Complete requests: 1000  //完成的请求数
Failed requests: 0  //失败的请求数
Total transferred: 13701482 bytes  //整个场景中的网络传输量
HTML transferred: 13197000 bytes  //整个场景中的HTML内容传输量
Requests per second: 19.66 [#/sec] (mean)  //吞吐量-每秒请求数,大家最关心的指标之一,
Time per request: 5087.180 [ms] (mean)  //用户平均请求等待时间,大家最关心的指标之二,
Time per request: 50.872 [ms] (mean, across all concurrent requests)  // 并发的每个请求平均消耗时间,大家最关心的指标之三
Transfer rate: 263.02 [Kbytes/sec] received  //平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

设置linux能被请求处理打开的文件个数

上面用的的压力测试工具,如果对方服务器这个限制没有调大,这边是没法测试真实数据
服务器默认能打开文件数是1024

ulimit –n # 调整能打开的文件数

NMAP网络扫描和主机检测工具

Nmap是一款网络扫描和主机检测的非常有用的工具。 Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。Nmap是一款非常强大的实用工具,可用于:

检测活在网络上的主机(主机发现)
检测主机上开放的端口(端口发现或枚举)
检测到相应的端口(服务发现)的软件和版本
检测操作系统,硬件地址,以及软件版本
检测脆弱性的漏洞(Nmap的脚本)

扫描中的重要参数

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。  
-sn: Ping Scan 只进行主机发现,不进行端口扫描。  
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。  
-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。  
-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。  
-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。  
--dns-servers : 指定DNS服务器。  
--system-dns: 指定使用系统的DNS服务器  
--traceroute: 追踪每个路由节点 

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。  
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。  
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。  
--scanflags : 定制TCP包的flags。  
-sI : 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)  
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。  
-sO: 使用IP protocol 扫描确定目标机支持的协议类型。  
-b : 使用FTP bounce scan扫描方式

Nmap通过探测将端口划分为6个状态:

open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。

Nmap的使用取决于目标主机,因为有一个简单的(基本)扫描和预先扫描之间的差异。下面是一些基本的命令和它们的用法的例子:

扫描单一的一个主机

#nmap wangshuai.tech
#nmap 172.18.2.44

小知识积累二_第1张图片
image.png

扫描整个子网,命令如下:

#nmap 172.18.2.0/24

扫描多个目标,命令如下:

#nmap 172.18.2.3 172.18.2.4

扫描一个范围内的目标,如下:

#nmap 172.18.2.44-100 (扫描IP地址为172.18.2.44-172.18.2.100内的所有主机)

如果你有一个ip地址列表,将这个保存为一个txt文件,和namp在同一目录下,扫描这个txt内的所有主机,命令如下:

#nmap -iL scan_ip.txt

扫描除过某一个ip外的所有子网主机,命令:

#nmap 172.18.2.0/24 -exclude 172.18.2.44

扫描除过某一个文件中的ip外的子网主机命令

#nmap 172.18.2.0/24 -exclude file xxx.txt (xxx.txt中的文件将会从扫描的主机中排除)

扫描特定主机上的80,21,23端口,命令如下

#nmap -p80,21,23 172.18.2.44

Nmap 将探测所有打开的端口,并尝试从每个端口上运行的服务中获取信息

# nmap -sV wangshuai.tech

sV: 指定让Nmap进行版本侦测  
--version-intensity : 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。  
--version-light: 指定使用轻量侦测方式 (intensity 2)  
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)  
--version-trace: 显示出详细的版本侦测过程信息。 
小知识积累二_第2张图片
image.png

探测发现主机上上匿名 ftp 登录

#nmap -sC 172.18.2.44 -p 21

小知识积累二_第3张图片
image.png

nmap 返回了很多关于在这台特定机器上运行的开放端口、服务和配置的信息。 这些信息中的大部分可用于帮助确定,如何保护本机,以及评估网络上可能运行的软件

#nmap -A 172.18.2.44

小知识积累二_第4张图片
image.png

Nmap的OS检测(O)

#nmap -O 172.18.1.46

-O: 指定Nmap进行OS侦测。  
--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。  
--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。 
小知识积累二_第5张图片
image.png
小知识积累二_第6张图片
image.png

nmap脚本扫描
nmap的脚本默认目录为:/usr/share/nmap/scripts/
NSE脚本用法
Nmap提供不少脚本使用的命令行参数。

1.  -sC: 等价于 --script=default,使用默认类别的脚本进行扫描。  
2.  --script=: 使用某个或某类脚本进行扫描,支持通配符描述  
3.  --script-args=: 为脚本提供默认参数  
4.  --script-args-file=filename: 使用文件来为脚本提供参数  
5.  --script-trace: 显示脚本执行过程中发送与接收的数据  
6.  --script-updatedb: 更新脚本数据库  
7.  --script-help=: 显示脚本的帮助信息,其中部分可以逗号分隔的文件或脚本类别。

#nmap -T5 -O -A -v --script vuln IP  利用脚本进行简单漏洞扫描

完整全面的扫描

#nmap –T4 –A –v IP
其中-A选项用于使用进攻性(Aggressive)方式扫描;-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。

防火墙/IDS规避
防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机的状况。
Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change)

规避用法

1.  -f; --mtu : 指定使用分片、指定数据包的MTU.  
2.  -D : 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。  
3.  -S : 伪装成其他IP地址  
4.  -e : 使用特定的网络接口  
5.  -g/--source-port : 使用指定源端口  
6.  --data-length : 填充随机数据让数据包长度达到Num。  
7.  --ip-options : 使用指定的IP选项来发送数据包。  
8.  --ttl : 设置time-to-live时间。  
9.  --spoof-mac : 伪装MAC地址  
10.  --badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。

#nmap -v -F -Pn -D172.18.2.44,172.18.1.45,ME -e eth0 -g 3355 172.18.1.46
其中,-F表示快速扫描100个端口;-Pn表示不进行Ping扫描;-D表示使用IP诱骗方式掩盖自己真实IP(其中ME表示自己IP);-e eth0表示使用eth0网卡发送该数据包;-g 3355表示自己的源端口使用3355;172.18.1.46是被扫描的目标IP地址。

tcpdump抓包工具

tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

tcpdump命令格式为:

  tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -w file ] [ expression ]

tcpdump选项

抓包选项:
-c:指定要抓取的包数量。注意,是最终要获取这么多个包。
    例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。
-i interface:指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),
    一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-N:不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'。
-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,
    输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。
    但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,
    从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

输出选项:
-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-v:当分析和打印的时候,产生详细的输出。
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。

其他功能性选项:
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
-w:将抓包数据输出到文件中而不是标准输出。
    可以同时配合"-G time"选项使得输出文件每time秒就自动切换到另一个文件。
    可通过"-r"选项载入这些文件以进行分析和打印。
-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。

tcpdump示例

(1).监视指定网络接口的数据包

tcpdump -i eth1
如果不指定网卡,默认tcpdump只会监视第一个网络接口,如eth0。

(2).监视指定主机的数据包,例如所有进入或离开shuai的数据包

tcpdump host shuai

(3).截获主机hostname发送的所有数据

tcpdump src host hostname

(4).监视所有发送到主机hostname的数据包

tcpdump dst host hostname

(5).监视指定接口和端口的数据包

tcpdump tcp port 22 and -i eth1

(6).对本机的udp 123端口进行监视(123为ntp的服务端口)

tcpdump udp port 123

(7).监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包

tcpdump -c 10 net 172.18

(8).抓取ping包

tcpdump -c 5 -nn -i eth0 icmp

如果明确要抓取主机为172.18.2.44对本机的ping,则使用and操作符。

tcpdump -c 5 -nn -i eth0 icmp and src 172.18.2.6

注意不能直接写icmp src 192.168.100.70,因为icmp协议不支持直接应用host这个type。

(9).抓取到本机22端口包

tcpdump -c 10 -nn -i eth0 tcp dst port 22

(10).解析包数据

tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22

CURL工具

curl [options] [URL...]

-A/--user-agent  设置用户代理发送给服务器 
-e/--referer  来源网址 
--cacert  CA证书 (SSL) 
-k/--insecure   允许忽略证书进行 SSL 连接 

curl工具常用选项

--compressed 要求返回是压缩的格式 
-H/--header 自定义首部信息传递给服务器 
-i 显示页面内容,包括报文首部信息 
-I/--head 只显示响应报文首部信息 
-D/--dump-header 将url的header信息存放在指定文件中 
--limit-rate  设置传输速度 
--basic 使用HTTP基本认证 
-u/--user 设置服务器的用户和密码 
-L   如果有3xx响应码,重新发请求到新位置 -o   将网络文件保存为指定的文件中 
-O  使用URL中默认的文件名保存文件到本地 
-0/--http1.0 使用HTTP 1.0  
-C - 选项可对文件使用断点续传功能 
-c/--cookie-jar  将url中cookie存放在指定文件中 
-x/--proxy  指定代理服务器地址 
-X/--request  向服务器发送指定请求方法 
-U/--proxy-user  代理服务器用户和密码 
-T 选项可将指定的本地文件上传到FTP服务器上 
--data/-d 方式指定使用POST方式传递数据 
-b name=data 从服务器响应set-cookie得到值,返回给服务器 

elinks工具:

elinks [OPTION]... [URL]...

-dump: 非交互式模式,将URL的内容输出至标准输出 
-source:打印源码 

你可能感兴趣的:(小知识积累二)