1.前言:
pypcap 是一个python lib,它是libpcap 的python版本,libpcap是unix/linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础。Libpcap可以在绝大多数类unix平台下工作.
2.安装:
本例以MAC平台为例,使用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地址对应的地区信息
:param ip:
:return:
'''
url_params = {'ip': ip} # 字典传递参数,如果值为None的键不会被添加到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)#开始监听网络
for ts, pkt in sniffer:
src = addr(pkt, sniffer.dloff + 12) # 获取源地址
dst = addr(pkt, sniffer.dloff + 16) # 获取目标地址
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获取网络请求的原始地址和目标地址,如果你有一个完善的IP库的话,可以匹配出网络去了那个网站(比如这里演示了请求百度),再通过调用淘宝的API(调用你太频繁会导致404错误)解析出目标地址的区域:
4.运行效果