@@ -40,13 +40,16 @@ def __init__(self, starttime='', endtime='', address=None, status=None,
4040 self ._ipv4_addr = None
4141 self ._ipv6_addr = None
4242 self ._mac_addr = None
43+ self ._vendor = None
4344 for addr in address :
4445 if addr ['addrtype' ] == "ipv4" :
4546 self ._ipv4_addr = addr ['addr' ]
4647 elif addr ['addrtype' ] == 'ipv6' :
4748 self ._ipv6_addr = addr ['addr' ]
4849 elif addr ['addrtype' ] == 'mac' :
4950 self ._mac_addr = addr ['addr' ]
51+ if 'vendor' in addr :
52+ self ._vendor = addr ['vendor' ]
5053
5154 self ._main_address = self ._ipv4_addr or self ._ipv6_addr or ''
5255 self ._address = address
@@ -147,8 +150,10 @@ def address(self, addrdict):
147150 self ._ipv4_addr = addrdict ['addr' ]
148151 elif addrdict ['addrtype' ] == 'ipv6' :
149152 self ._ipv6_addr = addrdict ['addr' ]
150- if addrdict ['addrtype' ] == 'mac' :
153+ elif addrdict ['addrtype' ] == 'mac' :
151154 self ._mac_addr = addrdict ['addr' ]
155+ if 'vendor' in addrdict :
156+ self ._vendor = addrdict ['vendor' ]
152157
153158 self ._main_address = self ._ipv4_addr or self ._ipv6_addr or ''
154159 self ._address = addrdict
@@ -171,6 +176,15 @@ def mac(self):
171176 """
172177 return self ._mac_addr or ''
173178
179+ @property
180+ def vendor (self ):
181+ """
182+ Accessor for the vendor attribute of the scanned host
183+
184+ :return: string (vendor) of empty string if no vendor defined
185+ """
186+ return self ._vendor or ''
187+
174188 @property
175189 def ipv6 (self ):
176190 """
@@ -316,7 +330,7 @@ def os_fingerprint(self):
316330 """
317331 rval = ''
318332 if self .os is not None :
319- rval = self .os .fingerprints . join ( " \n " )
333+ rval = " \n " . join ( self .os .fingerprints )
320334 return rval
321335
322336 def os_ports_used (self ):
@@ -434,9 +448,13 @@ def extraports_state(self):
434448 dictionnary containing state and amount of extra ports scanned
435449 for which a common state, usually, closed was discovered.
436450
437- :return: dict with keys 'state' and 'count'
451+ :return: dict with keys 'state' and 'count' or None
438452 """
439- _xtrports = self ._extras ['extraports' ]
453+ _xtrports = self ._extras .get ('extraports' , None )
454+
455+ if _xtrports is None :
456+ return None
457+
440458 return {'state' : _xtrports ['state' ], 'count' : _xtrports ['count' ]}
441459
442460 @property
@@ -445,9 +463,11 @@ def extraports_reasons(self):
445463 dictionnary containing reasons why extra ports scanned
446464 for which a common state, usually, closed was discovered.
447465
448- :return: array of dict containing keys 'state' and 'count'
466+ :return: array of dict containing keys 'state' and 'count' or None
449467 """
450- return self ._extras ['extraports' ]['reasons' ]
468+ r = self ._extras .get ('extraports' , {})
469+
470+ return r .get ('reasons' , None )
451471
452472 def get_dict (self ):
453473 """
0 commit comments