筆者的配置環境
- windows10
- python3.6.1
- pycharm2018
- scapy2.4.2
需要的支持
Graphviz和ImageMagick的應用程序,而非python的模塊
第一步:安裝scapy
直接pip install scapy即可
第二步:安裝Graphviz和ImageMagick
- Graphviz的windows msi安裝包如下,linux自己去Graphviz官網解決
https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi - ImageMagick的windows msi安裝包如下,linux自己去ImageMagick官網解決
https://imagemagick.org/download/binaries/
筆者的ImageMagick版本為:ImageMagick-7.0.8-34-Q16-x64-dll.exe
注:鏈接進不去的話搭配請搭配梯子
第三步:添加環境變量
分別給Graphviz和ImageMagick添加環境變量
這點很重要!!!!沒有添加的話將無法使用traceroute中的graph函數繪制追蹤圖。
- 筆者添加的Graphviz的環境變量路徑如下 C:\Program Files (x86)\Graphviz2.38\bin
- 筆者添加的ImageMagick的環境變量路徑 C:\Program Files\ImageMagick-7.0.8-Q16
第四步:測試
直接上代碼:
import os,sys,time,subprocess
from scapy.as_resolvers import AS_resolver_radb
from scapy.all import traceroute
domains='www.baidu.com'
target = domains.split(' ')
dport = [80]
if len(target) >= 1 and target[0] != '':
# 啟動路由跟蹤
res, unans = traceroute(domains, dport=dport, retry=-2)
# traceroute生成的信息繪制成svg
res.graph(target="> graph.svg", ASres=AS_resolver_radb(), type="svg") # ASres=AS_resolver_radb()改變為可用的whois提供商,而非原來的ASres=None后默認的被qiang了的提供商
time.sleep(1)
# svg 轉格式為 png
#subprocess.Popen("/usr/local/bin/convert test.svg test.png", shell=True)
else:
print("IP/domain number of errors, exit")
結果如下:
Begin emission:
********Finished sending 30 packets.
**************Begin emission:
Finished sending 8 packets.
Begin emission:
Finished sending 8 packets.
Received 22 packets, got 22 answers, remaining 7 packets
183.232.231.174:tcp80
1 10.21.123.254 11
2 172.16.9.254 11
3 10.32.254.2 11
4 10.32.254.10 11
5 10.36.254.18 11
6 10.0.1.6 11
7 111.59.124.129 11
9 111.12.4.124 11
17 183.232.231.174 SA
18 183.232.231.174 SA
19 183.232.231.174 SA
20 183.232.231.174 SA
21 183.232.231.174 SA
22 183.232.231.174 SA
23 183.232.231.174 SA
24 183.232.231.174 SA
25 183.232.231.174 SA
26 183.232.231.174 SA
27 183.232.231.174 SA
28 183.232.231.174 SA
29 183.232.231.174 SA
30 183.232.231.174 SA
生成svg的圖片
遇到的問題以及解決方法
報錯類型為
RuntimeError: Could not contact whois providers
想了解詳細原因的請移步 https://www.oschina.net/question/2917603_2278439 圍觀最下面的okidingme的回答。
解決辦法,請看筆者給出的代碼:
from scapy.as_resolvers import AS_resolver_radb
res.graph(target="> graph.svg", ASres=AS_resolver_radb(), type="svg")
ASres=AS_resolver_radb()改變為可用的whois提供商,而非原來的ASres=None后默認的被qiang了的提供商