Scapy是一個可以讓用戶發送、偵聽和解析並僞裝網絡報文的Python程序。這些功能可以用於製作偵測、掃描和攻擊網絡的工具。
1)常用的幾個命令
conf:保存配置信息,修改方式,conf.verb = 2
ls():可以顯示所有支持的數據包對象。例:list show、ls()、ls(TCP)
lsc():列出所有函數
hide_defaults():用來刪除一些用戶提供的和default value相同的項目
例:>>> a=IP()/TCP() >>> b=IP(str(a)) >>> b.hide_defaults() >>> b
display():display()方法可以簡單查看當前packet的各個參數的取值情況
例:>>> a=IP(dst="192.168.0.1") >>> a.display()
不同層之間通過“/”來連接
(1,4):爲1,2,3,4的四個 [1,4]: 爲1和4
2)數據包操作函數
1、send()在第三層發送數據包,但沒有接收功能
>>> send(IP(dst="192.168.115.188")/ICMP())
2、sendp(),在第二層發送數據包,同樣沒有接收功能
>>> sendp(Ether()/IP(dst="www.baidu.com",ttl=1)/ICMP())
3、sr(),在第三層發送數據包,有接收功能
>>> sr(IP(dst="192.168.115.1")/TCP(dport=[21,22,23]))
4、sr1(),在第三層發送數據包,有接收功能,但只接收第一個包
>>> sr1(IP(dst="192.168.115.188")/ICMP()/"test")
5、srloop(),在第三層工作,如下:
>>> p=srloop(IP(dst="www.baidu.com",ttl=1)/ICMP())
>>> p=srloop(IP(dst="www.baidu.com",ttl=1)/ICMP(),inter=3,count=2)
這裏第一條語句在執行時,將會不停的ping百度,第二條執行時每隔3秒ping一次,一共執行兩次。
6、srp()、srp1()、srploop()與上面3、4、5相同,只是工作在第二層。
3)實例
1、SYN掃描(也叫“半開式掃描”(half-open scanning),因爲它沒有完成一個完整的TCP連接。)
這種方法向目標端口發送一個SYN分組(packet),如果目標端口返回SYN/ACK,那麼可以肯定該端口處於檢聽狀態;否則,返回的是RST/ACK。
>>> ans,unans=sr1(IP(dst="61.135.169.105")/TCP(dport=80,flags="S"))
>>>ans.summary(lambda(s,r):r.sprintf("%TCP.sport% \t %TCP.flags%"))顯示
>>>ans.make_table(lambda(s,r):s.dst,s.src,s.ttl)
2、TCP traceroute(traceroute:用來追蹤出發點到目的地所經過的路徑)
>>>res,unans=traceroute(["www.baidu.com","www.kali.org"],dport=[80,443],maxttl=20,retry=-2)
>>>res.graph() 顯示圖形
>>>res.graph(target=">/tmp/graph.svg")
3、簡單的SNIFF嗅探
>>> sniff(filter="icmp and host 61.135.169.125",count=2)
>>> sniff(iface="ppp0",prn=lambda x:x.summary())
4、二層掃描之ARP掃描
>>>ARP().display()
>>>arp=ARP()
>>>arp.pdst=”192.168.1.1”
>>>anser=sr1(arp) #發送同時收到迴應包
5、實現ping命令
>>>i = IP()
>>>p = ICMP()
>>>ping = (i/p)
>>>ping[IP].dst=”192.168.1.1”
>>>ping.display()
>>>anser=sr1(ping) #發送同時收到迴應包