链接地址: https://github.com/dhgdhg/Scapy-Note

十五.探测

15.1.ACK扫描

  • ans, unans = sr(IP(dst="www.slashdot.org")/TCP(dport=[80,666],flags="A"))
  • 未过滤的端口:
    • [s[TCP].dport for s in ans]
  • 过滤的端口:
    • [s[TCP].dport for s in unans]

15.2.Xmas扫描

带有状态标志的段发送到封闭端口则应使用RST进行响应. 此行为应允许攻击者通过发送某些类型的规则破坏数据包(不同步或TCB不允许)来扫描关闭的端口, 并通过RST数据包检测关闭的端口

  • ans, unans = sr(IP(dst="192.168.1.1")/TCP(dport=666,flags="FPU"))
    • F: FIN
    • P: PSH
    • U: URG
  • 检查RST响应将显示目标上的关闭端口

15.3.IP扫描

一个较低级别的IP扫描可以用来枚举支持的协议

  • ans, unans = sr(IP(dst="192.168.1.1",proto=(0,255)),timeout=1)
  • [s.proto for s, __ in ans]

15.4.ARP_Ping

发现本地以太网主机的最快方法是使用ARP Ping方法

  • ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.0/24"),timeout=2)
  • ans.summary(lambda x: (x[1]['Ether'].src,x[1]['ARP'].psrc))
    • ans.summary(lambda x: (x[1].src,x[1].psrc))
    • 发送包, 接收包 = x
  • Scapy还包括一个内置的arping()函数, 它执行类似于上面的两个命令:
    • arping("192.168.1.*")

15.5.ICMP_Ping

  • ans, unans = sr(IP(dst="192.168.1.1-254")/ICMP())
  • ans.summary(lambda x: x[1].sprintf("%IP.src% is alive"))
    • ans.summary(lambda x: x[1]['IP'].src)

15.6.TCP_Ping

在ICMP回显请求被阻塞的情况下, 我们仍然可以使用各种TCP Ping, 比如下面的TCP SYN Ping:

  • ans, unans = sr(IP(dst="192.168.1.*")/TCP(dport=80,flags="S"))
  • ans.summary(lambda x: x[1].sprintf("%IP.src% is alive"))

15.7.TCP端口扫描

在每个端口上发送一个TCP SYN. 等待SYN-ACK或RST或ICMP错误

  • ans, unans = sr(IP(dst="target")/TCP(flags="S", dport=(1,1024)))
  • ans.nsummary( lfilter=lambda x: (x[1].haslayer(TCP) and (x[1].getlayer(TCP).flags=='SA')))

15.8.UDP_Ping

选择最有可能关闭的端口(开放的UDP端口可能会收到空数据包, 但会忽略它们). ICMP端口不可达, 则表示机器已启动.

  • ans, unans = sr(IP(dst="192.168.*.1-10")/UDP(dport=0))
  • ans.summary( lambda x: x[1].sprintf("%IP.src% is alive"))

15.9.IKE扫描

我们尝试通过发送ISAKMP安全协会提案并接收答案来识别VPN集中器

  • res, unans = sr( IP(dst="192.168.1.*")/UDP() /ISAKMP(init_cookie=RandString(8), exch_type="identity,prot.")/ISAKMP_payload_SA(prop=ISAKMP_payload_Proposal()))
  • res.nsummary(prn=lambda x: x[1].src, lfilter=lambda x: x[1].haslayer(ISAKMP))

15.DNS Requests

  • IPv4(A) request
    • ans = sr1(IP(dst="8.8.8.8")/UDP(sport=RandShort(), dport=53)/DNS(rd=1,qd=DNSQR(qname="secdev.org",qtype="A")))
    • ans.an.rdata
  • SOA request
    • ans = sr1(IP(dst="8.8.8.8")/UDP(sport=RandShort(), dport=53)/DNS(rd=1, qd=DNSQR(qname="secdev.org",qtype="A")))
    • ans.ns.mname
    • ans.ns.rname
  • MX request
    • ans = sr1(IP(dst="8.8.8.8")/UDP(sport=RandShort(), dport=53)/DNS(rd=1,qd=DNSQR(qname="google.cn",qtype="MX")))
    • [x.exchange for x in ans.an.iterpayloads()]