def getData( self, mgroup, hostip, port=29495, pkts=1000, pktlen=1080, block=True, returnSddsAnalyzer=True):
totalRead=0.0
startTime = _time.time()
sock = None
ismulticast=False
blen=10240
bytesRead=0
requestedBytes=pkts*pktlen
data=[]
rawdata=''
try:
try:
ip_class=int(mgroup.split('.')[0])
if ip_class == '224' or ip_class == '239':
ismulticast=True
except:
pass
#print " Capturing ", mgroup, " host ", hostip, " port ", port
sock = _socket.socket(_socket.AF_INET, _socket.SOCK_DGRAM, _socket.IPPROTO_UDP)
sock.setsockopt(_socket.SOL_SOCKET, _socket.SO_REUSEADDR, 1)
sock.bind(("",port))
if ismulticast:
mreq=struct.pack('4s4s',_socket.inet_aton(mgroup),_socket.inet_aton(hostip))
sock.setsockopt(_socket.IPPROTO_IP, _socket.IP_ADD_MEMBERSHIP, mreq)
print "Capturing Socket Interface: (MULTICAST) Host Interface: " + hostip + " Multicast: " + mgroup + " Port: "+ str(port)
else:
print "Capturing Socket Interface: (UDP) Host Interface: " + hostip + " Source Address: " + mgroup + " Port: "+ str(port)
ncnt=0
while totalRead < requestedBytes:
rcvddata = sock.recv(blen,_socket.MSG_WAITALL)
rawdata=rawdata+rcvddata
data=data+list(rcvddata)
totalRead = totalRead + len(rcvddata)
ncnt += 1
print " read ", ncnt, " pkt ", len(rcvddata)
except KeyboardInterrupt,e :
traceback.print_exc()
print "Exception during packet capture: " + str(e)
except Exception, e :
traceback.print_exc()
print "Exception during packet capture: " + str(e)
finally:
endTime=_time.time()
deltaTime=endTime -startTime
if sock: sock.close()
print "Elapsed Time: ", deltaTime, " Total Data (kB): ", totalRead/1000.0, " Rate (kBps): ", (totalRead/1000.0)/deltaTime
if returnSddsAnalyzer:
from ossie.utils.sdds import SDDSAnalyzer
return SDDSAnalyzer( rawdata, pkts, pktlen, totalRead )
else:
return data, rawdata, (pktlen,pkts,totalRead)
评论列表
文章目录