Scapy
可以是用户发送,嗅探、分析和伪造网络数据包
一个强大的交互式包处理程序,
基于python,因此可以像python那样,函数调用、循环、分支语句等等!
网络的发现相当于是一个黑盒测试,我们需要发送许多个stimuli(数据包),但是得到回应的却是极少数!
任何数据包都可以被创建和切割
_可以得到lasted result
产生数据包集合
send Package
fuzzing
如图所示,可以看到flags的值是什么意思了。默认值2表示的意思就是SYN=1!
DNS查询:
>>>sr1(IP(dst="192.168.5.1")/UDP()/DNS(rd=1,qd=DNSQR(qname="www.baidu.com")))
ACK 扫描:
ans,unans=sr(IP(dst="www.slashdot.org")/TCP(dport=[80,666],flags="A"))
flags=“A”
Xmas Scan圣诞树扫描,Nmap里面这些扫描方式都是有的!关于这种扫描方式,由于MicroSoft忽略了标准,所以这种扫描方式对Windows95/NT是无效的!
ans,unans = sr(IP(dst="192.168.1.1")/TCP(dport=666,flags="FPU") )
flags=“FPU”,用wireshark看一下到底什么是FPU
可以看到,实际上就是将FIN PSH URG置为1的TCP数据包!
IP扫描
ans,unans=sr(IP(dst="192.168.1.1",proto=(0,255))/"SCAPY",retry=2)
arp Ping 扫描局域网中的Mac
ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.0/24"),timeout=2)
对结果的处理
ICMP ping
ans,unans=sr(IP(dst="192.168.1.1-254")/ICMP())
在ICMP默认的封装格式中可以看到type=8,就是请求回显(Ping)
TCP ping
有的时候,某些服务器是可以进制ping的,可以是禁止icmp协议!
TCP扫描
在BT5中对某台readhad的扫描,下面我在这台redhat上面写上禁ping的策略
部署在redhat上面的禁ping策略
现在已经ping不起作用了,下面来看下此时的TCP ping
对于TCP的SYN扫描,看来还是有效的!
UPD Scan 其形式和TCP Scan 是类似的!
攻击手段!
非正常的数据包! Ping of Death ICMP携带的最大数据包长度为
SYN Scan SYN扫描,将flags字段设置为2,或者是“S”
事实上说明flags=“S”和flags=2 效果是一样的!而且默认的值就是flags=2,关于flags字段,还有flags=“SA” 即SYNACK 包!
???在这个IP(虚拟机的)里面,总是有警告:扫描目标的Mac无法发现,即使是手动封装也还是会出现问题?还有就是扫描本级也有问题!貌似扫描x.x.x.1/google.com d等是没有什么问题的!
后来本人换用BackTrack5 没有发现这样的问题,怀疑还是与用户权限有关系的!
sr(IP(dst="192.168.1.1")/TCP(sport=RandShort(),dport=[440,441,442,443],flags='S')) 使用随机端口进行对服务器的扫描
关于结果与sprintf()
nmap_fd
最早的支持的是Nmap4.2,貌似支持4.3以前的版本。在scapy的V2中必须先load an extension module
load_module(“nmap”)
使用scapy 嗅探网络数据包
sniff(fliter = “icmp and host 66.35.250.151”, count=2)
sniff(iface=”en1”, count= , prn= lambda x: x.show)
使用wireshark来查看数据包
>>> packets = Ether()/IP(dst=Net("google.com/30"))/ICMP() # first generate some packets >>> wireshark(packets) # show them with Wireshark
使用scapy构造DHCP Discovery 数据包!
>>> conf.checkIPaddr = False
>>> fam,hw =get_if_raw_hwaddr(conf.iface)
>>> dhcp_discover = Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=hw)/DHCP(options=[("message-type","discover"),"end"])
>>> ans, unans = srp(dhcp_discover, multi=True) # Press CTRL-C after several seconds
Begin emission: Finished to send 1 packets. .*...*.. Received 8 packets, got 2 answers, remaining 0 packets
可以查看的LAN上面所有的DHCP Server
注意记得要把在srp函数中要加muti = True,这样才能接受多个dhcp的offer