python捕获数据包,不活不到,老超时,怎么回事啊?

思先 2013-07-09 11:14:53
# -*- coding: cp936 -*-
import dlls
import winpcap_constants
import winpcap_structures
import winpcap_structures_extensions
import winpcap_functions
import winpcap_functions_extensions
from ctypes import *
import sys
import time

if __name__=='__main__':
alldevs=POINTER(winpcap_structures.pcap_if_t)()
d=POINTER(winpcap_structures.pcap_if_t)()
inum=-1
i=0
adhandle=POINTER(winpcap_structures.pcap_if)()
res=-1
errbuf=create_string_buffer(winpcap_constants.PCAP_ERRBUF_SIZE)
ltime=POINTER(winpcap_structures_extensions.tm)()
timestr=c_char*16
header=POINTER(winpcap_structures.pcap_pkthdr)()
pkt_data=POINTER(c_ubyte)()
local_tv_sec=-1

#获取本机设备列表
if winpcap_functions.pcap_findalldevs_ex(winpcap_constants.PCAP_SRC_IF_STRING,None,byref(alldevs),errbuf)==-1:
print 'Error in pcap_findalldevs_ex: %s'%(errbuf)
sys.exit(1)

#打印列表
d=alldevs
while d:
try:
i=i+1
print i,d.contents.name

if d.contents.description:
print d.contents.description
else:
print 'No description avaiable'

d=d.contents.next
except:
break

if i==0:
print 'No interfaces found! Make sure WinPcap is installed.'

inum=int(raw_input('Enter the interface number (1-%d):'%(i)))

if inum <1 and inum > i:
print 'Interface number out of range.'
winpcap_functions.pcap_freealldevs(alldevs)
sys.exit(1)

#跳转到已选中的适配器
d=alldevs
i=0
while i<inum-1:
try:
i=i+1
d=d.contents.next
except:
break

#打开设备
adhandle=winpcap_functions.pcap_open(d.contents.name,65536,winpcap_constants.PCAP_OPENFLAG_PROMISCUOUS,1000,None,errbuf)
if adhandle==None:
print 'Unable to open the adapter. %s is not supported by WinPcap'%(d.contents.name)
winpcap_functions.freealldevs(alldevs)
sys.exit(1)

print 'Listensing on %s...'%(d.contents.description)

#释放设备列表
winpcap_functions.pcap_freealldevs(alldevs)

#获取数据包
res=winpcap_functions.pcap_next_ex(adhandle,byref(header),byref(pkt_data))

while res>=0:
if res==0:
#超时时间到
continue
#将时间戳转换成可识别的格式
local_tv_sec=header.contents.ts.tv_sec
ltime=time.localtime(local_tv_sec)
timestr=time.strftime("%H:%M:%S", ltime)
print("%s,%.6d len:%d data:%s" % (timestr, header.contents.ts.tv_usec, header.contents.len,pkt_data.contents))

if res==-1:
print 'Error reading the packets: %s'%(winpcap_functions.pcap_geterr(adhandle))
sys.exit(1)


...全文
77 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,717

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧