00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 import time
00019 from objects.logic.common.logger import logger
00020
00021
00022
00023 class networkEntity():
00024 def __init__(self, selfIPAddress, decodedPacketDict, geoIPDatabase, xportTableDict):
00025
00026 self.selfIPAddress = selfIPAddress
00027
00028
00029 if decodedPacketDict['sourceIP'] == self.selfIPAddress:
00030 self.foreignIPAddress = decodedPacketDict['destIP']
00031 self.foreignPort = decodedPacketDict['destPort']
00032 self.selfPort = decodedPacketDict['sourcePort']
00033 else:
00034 self.foreignIPAddress = decodedPacketDict['sourceIP']
00035
00036 self.foreignPort = decodedPacketDict['sourcePort']
00037 self.selfPort = decodedPacketDict['destPort']
00038
00039 self.since = time.time()
00040 self.lastUpdateTS = time.time()
00041 self.totalBytes = 0
00042 self.procID = ""
00043 self.procName = ""
00044
00045 self.foreignLongitude = 0.0
00046 self.foreignLatitude = 0.0
00047 self.foreignCity = ""
00048 self.foreignStateProv = ""
00049 self.foreignCountry = ""
00050 self.foreignOrganization = ""
00051 self.foreignISP = ""
00052
00053 self.Pid = "0"
00054 self.processName = "Unknown";
00055
00056 self.resolveGeoData(geoIPDatabase)
00057
00058
00059 nodeInfo, processState = xportTableDict.getXportTableInfo(self.selfPort)
00060
00061 if nodeInfo is not None:
00062 self.processName = nodeInfo["ProcessName"]
00063 self.Pid = "%d" % nodeInfo["Pid"]
00064
00065
00066 def __str__(self):
00067 pass
00068
00069 def __getitem__(self, key):
00070
00071 if hasattr(self, key):
00072 return getattr(self, key)
00073 else:
00074 errString = ":There was an error getting retreiving [%s] key: Attribute does not exist" % (key)
00075 logger.log(__name__ + errString)
00076 return ""
00077
00078
00079
00080
00081 def resolveGeoData(self, geoIPDatabase):
00082
00083 geoIPDatabase.find_by_addr(self.foreignIPAddress)
00084
00085 try:
00086 self.foreignLatitude = geoIPDatabase.latitude
00087 self.foreignLongitude = geoIPDatabase.longitude
00088 self.foreignCity = unicode(geoIPDatabase.city)
00089 self.foreignCountry = geoIPDatabase.country_name
00090 self.foreignOrganization = unicode(geoIPDatabase.organization)
00091 self.foreignISP = unicode(geoIPDatabase.isp)
00092 except Exception, ex:
00093 logger.log(__name__ + ": There was an exception extracting GEOIP information")
00094 logger.log(ex)
00095
00096 if self.foreignCity == "" or self.foreignCity == None:
00097 self.exactLocation = False
00098 self.foreignCity = "Unknown"
00099
00100 else:
00101 self.exactLocation = True
00102
00103 if self.foreignCountry == "" or self.foreignCountry == None:
00104 self.foreignCountry = "Unknown"
00105
00106
00107
00108
00109 def computeStatistics(self, decodedPacketDict):
00110 self.lastUpdateTS = time.time()
00111 self.totalBytes += decodedPacketDict['payloadSize']
00112
00113
00114
00115
00116