1.前言:
pypcap 是一個(gè)python lib,它是libpcap 的python版本,libpcap是unix/linux平臺(tái)下的網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包,大多數(shù)網(wǎng)絡(luò)監(jiān)控軟件都以它為基礎(chǔ)。Libpcap可以在絕大多數(shù)類unix平臺(tái)下工作.
2.安裝:
本例以MAC平臺(tái)為例,使用pip 工具直接安裝
命令行:pip install pypcap
3.代碼Demo:
import pcap
import time
import requests
def addr(pkt, offset):
'''
獲取ip地址
:param pkt:
:param offset:
:return:
'''
rets = ""
for i in range(offset, offset + 4):
rets = rets + '.' + (str((pkt[i])))
return rets.strip('.')
def getjson(ip):
'''
獲取ip地址對應(yīng)的地區(qū)信息
:param ip:
:return:
'''
url_params = {'ip': ip} # 字典傳遞參數(shù),如果值為None的鍵不會(huì)被添加到url中
r = requests.get('http://ip.taobao.com/service/getIpInfo.php', params=url_params)
return r.json()
def getAddres(target):
'''
獲取地址詳情
:param target:
:return:
'''
targetStr = target['data']['country'] + target['data']['region'] + target['data']['city']
return targetStr
if __name__ == '__main__':
sniffer = pcap.pcap(name=None, promisc=True, immediate=True, timeout_ms=50)#開始監(jiān)聽網(wǎng)絡(luò)
for ts, pkt in sniffer:
src = addr(pkt, sniffer.dloff + 12) # 獲取源地址
dst = addr(pkt, sniffer.dloff + 16) # 獲取目標(biāo)地址
date = time.strftime("%Y-%m-%d %H:%M:%S") # 打印地址
try:
if '39.156.66.14' == dst.strip():
targetStr = target + "(百度)"
else:
target = getjson(dst) # 查地址
targetStr = target + "(" + getAddres(target) + ")" # 把地址變成可讀去更好的字符串
print('time:%s\t start: %-16s\t target: %-16s' % (date, src, targetStr)) # 打印解析后的地址
except Exception as err:
# print("404")
print('time:%s\t start: %-16s\t target: %-16s' % (date, src, dst)) # 打印地址
pass
本Demo,通過libpcap的Sniffer API獲取網(wǎng)絡(luò)請求的原始地址和目標(biāo)地址,如果你有一個(gè)完善的IP庫的話,可以匹配出網(wǎng)絡(luò)去了那個(gè)網(wǎng)站(比如這里演示了請求百度),再通過調(diào)用淘寶的API(調(diào)用你太頻繁會(huì)導(dǎo)致404錯(cuò)誤)解析出目標(biāo)地址的區(qū)域:
4.運(yùn)行效果

這里調(diào)用淘寶API太頻繁了所以不給解析ip目標(biāo)地址,只能看到IP,第一次運(yùn)行的話,能解析出來具體地址