Hello community,
here is the log from the commit of package python-passivetotal for openSUSE:Factory checked in at 2019-06-18 14:58:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-passivetotal (Old)
and /work/SRC/openSUSE:Factory/.python-passivetotal.new.4811 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-passivetotal"
Tue Jun 18 14:58:07 2019 rev:3 rq:710329 version:1.0.31
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-passivetotal/python-passivetotal.changes 2018-12-24 11:40:54.649477736 +0100
+++ /work/SRC/openSUSE:Factory/.python-passivetotal.new.4811/python-passivetotal.changes 2019-06-18 14:58:17.813332889 +0200
@@ -1,0 +2,12 @@
+Fri Jun 14 14:40:02 UTC 2019 - Sebastian Wagner
+
+- update to version 1.0.31:
+ - add osint in cli
+ - added response objects
+ - added approved fields for csv
+ - added to_csv function
+ - used response objects in client
+ - removed whois csv implementation
+ - Add host attribute support
+
+-------------------------------------------------------------------
Old:
----
passivetotal-1.0.30.tar.gz
New:
----
passivetotal-1.0.31.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-passivetotal.spec ++++++
--- /var/tmp/diff_new_pack.gospDi/_old 2019-06-18 14:58:18.413332545 +0200
+++ /var/tmp/diff_new_pack.gospDi/_new 2019-06-18 14:58:18.421332540 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-passivetotal
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%bcond_without test
Name: python-passivetotal
-Version: 1.0.30
+Version: 1.0.31
Release: 0
Summary: Client for the PassiveTotal REST API
License: GPL-2.0-only
++++++ passivetotal-1.0.30.tar.gz -> passivetotal-1.0.31.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/PKG-INFO new/passivetotal-1.0.31/PKG-INFO
--- old/passivetotal-1.0.30/PKG-INFO 2016-07-18 19:59:28.000000000 +0200
+++ new/passivetotal-1.0.31/PKG-INFO 2019-06-13 17:06:54.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: passivetotal
-Version: 1.0.30
+Version: 1.0.31
Summary: Client for the PassiveTotal REST API
Home-page: https://github.com/passivetotal/python_api
Author: Research Team, passivetotal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/cli/client.py new/passivetotal-1.0.31/passivetotal/cli/client.py
--- old/passivetotal-1.0.30/passivetotal/cli/client.py 2016-05-24 22:38:01.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal/cli/client.py 2019-06-13 16:56:57.000000000 +0200
@@ -1,21 +1,21 @@
#!/usr/bin/env python
-
-__author__ = 'Brandon Dixon (PassiveTotal)'
-__version__ = '1.0.0'
-
import sys
-
from argparse import ArgumentParser
from passivetotal.common.utilities import prune_args
from passivetotal.common.utilities import to_bool
from passivetotal.common.utilities import valid_date
-from passivetotal.libs.attributes import AttributeRequest
-from passivetotal.libs.actions import ActionsClient
-from passivetotal.libs.dns import DnsRequest
-from passivetotal.libs.ssl import SslRequest
-from passivetotal.libs.whois import WhoisRequest
+from passivetotal.libs.attributes import AttributeRequest, AttributeResponse
+from passivetotal.libs.actions import ActionsClient, ActionsResponse
+from passivetotal.libs.dns import DnsRequest, DnsResponse
+from passivetotal.libs.ssl import SslRequest, SSLResponse, SSLHistoryResponse
+from passivetotal.libs.whois import WhoisRequest, WhoisResponse
+
+from passivetotal.libs.enrichment import EnrichmentRequest
from passivetotal.response import Response
+__author__ = 'Brandon Dixon (PassiveTotal)'
+__version__ = '1.0.0'
+
def call_dns(args):
"""Abstract call to DNS-based queries."""
@@ -29,9 +29,9 @@
)
if args.unique:
- data = client.get_unique_resolutions(**pruned)
+ data = DnsResponse.process(client.get_unique_resolutions(**pruned))
else:
- data = client.get_passive_dns(**pruned)
+ data = DnsResponse.process(client.get_passive_dns(**pruned))
return data
@@ -41,13 +41,16 @@
client = AttributeRequest.from_config()
pruned = prune_args(
query=args.query,
- type=args.type
)
if args.type == 'tracker':
- data = client.get_host_attribute_trackers(**pruned)
+ data = AttributeResponse.process(
+ client.get_host_attribute_trackers(**pruned)
+ )
else:
- data = client.get_host_attribute_components(**pruned)
+ data = AttributeResponse.process(
+ client.get_host_attribute_components(**pruned)
+ )
return data
@@ -62,9 +65,13 @@
)
if not args.field:
- data = client.get_whois_details(**pruned)
+ data = WhoisResponse.process(
+ client.get_whois_details(**pruned)
+ )
else:
- data = client.search_whois_by_field(**pruned)
+ data = WhoisResponse.process(
+ client.search_whois_by_field(**pruned)
+ )
return data
@@ -76,7 +83,6 @@
query=args.query,
compact_record=args.compact,
field=args.field,
- type=args.type
)
valid_types = ['search', 'history']
@@ -84,17 +90,28 @@
raise ValueError("Invalid type specified.")
if not args.type:
- data = client.get_ssl_certificate_details(**pruned)
+ data = SSLResponse.process(
+ {'results': [client.get_ssl_certificate_details(**pruned)]}
+ )
elif args.type == 'history':
- data = client.get_ssl_certificate_history(**pruned)
+ data = SSLHistoryResponse.process(
+ client.get_ssl_certificate_history(**pruned)
+ )
elif args.type == 'search' and args.field:
- data = client.search_ssl_certificate_by_field(**pruned)
+ data = SSLResponse.process(
+ client.search_ssl_certificate_by_field(**pruned)
+ )
else:
raise ValueError("Field argument was missing from the call.")
return data
+def call_osint(args):
+ client = EnrichmentRequest.from_config()
+ return client.get_osint(query=args.query)
+
+
def call_actions(args):
"""Abstract call to actions-based queries."""
client = ActionsClient.from_config()
@@ -109,6 +126,7 @@
metadata=args.metadata
)
+ data = {}
if args.tags:
tag_values = [x.strip() for x in args.tags.split(',')]
pruned['tags'] = tag_values
@@ -143,7 +161,7 @@
if args.metadata:
data = client.get_metadata(**pruned)
- return data
+ return ActionsResponse.process(data)
def write_output(results, arguments):
@@ -155,8 +173,7 @@
"""
if not arguments.format:
arguments.format = 'json'
- data = Response.process(results)
- data = [getattr(data, arguments.format)]
+ data = [getattr(results, arguments.format)]
return data
@@ -242,6 +259,13 @@
action.add_argument('--json', '-j', action="store_true",
help="Output as JSON")
+ osint = subs.add_parser('osint', help="Query OSINT data")
+ osint.add_argument('--query', '-q', required=True,
+ help="Query for a domain or IP address")
+ osint.add_argument('--format', choices=['json', 'text', 'csv',
+ 'stix', 'table', 'xml'],
+ help="Format of the output from the query")
+
args, unknown = parser.parse_known_args()
data = None
@@ -256,6 +280,8 @@
data = call_actions(args)
elif args.cmd == 'attribute':
data = call_attribute(args)
+ elif args.cmd == 'osint':
+ data = call_osint(args)
else:
parser.print_usage()
sys.exit(1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/common/const.py new/passivetotal-1.0.31/passivetotal/common/const.py
--- old/passivetotal-1.0.30/passivetotal/common/const.py 2016-03-14 20:17:36.000000000 +0100
+++ new/passivetotal-1.0.31/passivetotal/common/const.py 2019-06-13 16:56:57.000000000 +0200
@@ -3,7 +3,10 @@
WHOIS_SECTIONS = ['admin', 'tech', 'registrant']
WHOIS_SECTION_FIELDS = ['section', 'query', 'city', 'country', 'email', 'name',
'organization', 'postalCode', 'state', 'street']
-
+DNS_APPROVED_FIELDS = [
+ "lastSeen", "resolve", "firstSeen", "resolveType", "value", "recordType",
+ "recordHash", "collected",
+]
SSL_VALID_FIELDS = ["issuerSurname", "subjectOrganizationName",
"issuerCountry", "issuerOrganizationUnitName",
"fingerprint", "subjectOrganizationUnitName",
@@ -19,6 +22,10 @@
"subjectProvince", "issuerSerialNumber",
"issuerEmailAddress"]
+
+ATTRIBUTE_APPROVED_FIELDS = [
+ "lastSeen", "firstSeen", "attributeType", "hostname", "attributeValue",
+]
CLASSIFICATION_VALID_VALUES = ['malicious', 'suspicious', 'non-malicious',
'unknown']
ACTIONS = 'actions'
@@ -29,3 +36,5 @@
ACTIONS_SINKHOLE = 'sinkhole'
ACTIONS_TAG = 'tags'
ENRICHMENT = 'enrichment'
+
+TRACKER_VALID_FIELDS = ["51laId", "AboutmeId", "AddThisPubId", "AddThisUsername", "AuthorstreamId", "BitbucketcomId", "BitlyId", "CheezburgerId", "ClickyId", "ColourloversId", "DiigoId", "DispusId", "EngadgetId", "EtsyId", "FacebookId", "FavstarId", "FfffoundId", "FlavorsId", "FlickrId", "FoodspottingId", "FreesoundId", "GitHubId", "GithubId", "GoogleAnalyticsTrackingId", "GooglePlusId", "GoogleTagManagerId", "HubpagesId", "ImgurId", "InstagramId", "KloutId", "LanyrdId", "LastfmId", "LibrarythingId", "LinkedInId", "LinkedinId", "MarketinglandcomId", "MixpanelId", "MuckrackId", "MyanimelistId", "MyfitnesspalId", "NewRelicId", "OptimizelyId", "PandoraId", "PicasaId", "PinkbikeId", "PinterestId", "PlancastId", "PlurkId", "PornhubId", "RaptorId", "ReadabilityId", "RedditId", "RedtubeId", "SlideshareId", "SmugmugId", "SmuleId", "SoundcloudId", "SoupId", "SpeakerdeckId", "SporcleId", "StackoverflowId", "SteamcommunityId", "StumbleuponId", "ThesixtyoneId", "TribeId", "TripitId", "TumblrId", "TwitpicId", "TwitterId", "UntappdId", "UstreamId", "WattpadId", "WefollowId", "WhosAmungUsId", "WordPressId", "Wordpress", "SupportId", "XangaId", "Xfire", "SocialId", "XhamsterId", "XvideosId", "YandexMetricaCounterId", "YouTubeChannel", "YouTubeId", "YoutubeId"]
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/common/utilities.py new/passivetotal-1.0.31/passivetotal/common/utilities.py
--- old/passivetotal-1.0.30/passivetotal/common/utilities.py 2016-07-18 19:57:07.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal/common/utilities.py 2019-06-13 16:56:57.000000000 +0200
@@ -3,6 +3,22 @@
import json
import os
import socket
+import csv
+import sys
+if sys.version_info[0] == 3:
+ from io import StringIO
+else:
+ from io import BytesIO as StringIO
+
+
+def to_csv(headers, data):
+ output = StringIO()
+ writer = csv.writer(output)
+ writer.writerow(headers)
+ for i in data:
+ writer.writerow(i)
+ output.seek(0)
+ return output.read()
def is_ip(value):
@@ -30,7 +46,7 @@
negative = ("no", "n", "false", "f", "0", "0.0", "", "none", "[]", "{}")
if str(string).lower() in negative:
return False
- raise Exception('Invalid value for boolean conversion: ' + str(value))
+ raise Exception('Invalid value for boolean conversion: ' + str(string))
def prune_args(**kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/libs/actions.py new/passivetotal-1.0.31/passivetotal/libs/actions.py
--- old/passivetotal-1.0.30/passivetotal/libs/actions.py 2016-03-14 20:17:36.000000000 +0100
+++ new/passivetotal-1.0.31/passivetotal/libs/actions.py 2019-06-13 16:56:57.000000000 +0200
@@ -1,10 +1,7 @@
#!/usr/bin/env python
"""PassiveTotal API Interface."""
-
-__author__ = 'Brandon Dixon (PassiveTotal)'
-__version__ = '1.0.0'
-
from passivetotal.api import Client
+from passivetotal.response import Response
# exceptions
from passivetotal.common.exceptions import MISSING_FIELD
from passivetotal.common.exceptions import INVALID_VALUE_TYPE
@@ -19,6 +16,9 @@
from passivetotal.common.const import CLASSIFICATION_VALID_VALUES
from passivetotal.common.const import ENRICHMENT
+__author__ = 'Brandon Dixon (PassiveTotal)'
+__version__ = '1.0.0'
+
class ActionsClient(Client):
@@ -114,3 +114,7 @@
def get_metadata(self, **kwargs):
return self._get(ENRICHMENT, '', **kwargs)
+
+
+class ActionsResponse(Response):
+ pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/libs/attributes.py new/passivetotal-1.0.31/passivetotal/libs/attributes.py
--- old/passivetotal-1.0.30/passivetotal/libs/attributes.py 2016-05-24 22:21:15.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal/libs/attributes.py 2019-06-13 16:56:57.000000000 +0200
@@ -4,7 +4,10 @@
__author__ = 'Brandon Dixon (PassiveTotal)'
__version__ = '1.0.0'
+from passivetotal.common.const import ATTRIBUTE_APPROVED_FIELDS as approved_fields
from passivetotal.api import Client
+from passivetotal.response import Response
+from passivetotal.common import utilities
class AttributeRequest(Client):
@@ -50,3 +53,12 @@
:return: Dict of matching hosts using a tracking ID
"""
return self._get('trackers', 'search', **kwargs)
+
+
+class AttributeResponse(Response):
+ @property
+ def csv(self):
+ data = []
+ for record in self._results['results']:
+ data.append([record.get(i) for i in approved_fields])
+ return utilities.to_csv(approved_fields, data)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/libs/dns.py new/passivetotal-1.0.31/passivetotal/libs/dns.py
--- old/passivetotal-1.0.30/passivetotal/libs/dns.py 2016-05-24 22:22:19.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal/libs/dns.py 2019-06-13 16:56:57.000000000 +0200
@@ -1,11 +1,13 @@
#!/usr/bin/env python
"""PassiveTotal API Interface."""
+from passivetotal.api import Client
+from passivetotal.response import Response
+from passivetotal.common import utilities
+from passivetotal.common.const import DNS_APPROVED_FIELDS as approved_fields
__author__ = 'Brandon Dixon (PassiveTotal)'
__version__ = '1.0.0'
-from passivetotal.api import Client
-
class DnsRequest(Client):
@@ -51,4 +53,13 @@
:param str query: Keyword value to search for in the dataset
:return: List of matching hits based on the keyword
"""
- return self._get('dns', 'search', 'keyword', **kwargs)
\ No newline at end of file
+ return self._get('dns', 'search', 'keyword', **kwargs)
+
+
+class DnsResponse(Response):
+ @property
+ def csv(self):
+ data = []
+ for record in self._results['results']:
+ data.append([record.get(i) for i in approved_fields])
+ return utilities.to_csv(approved_fields, data)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/libs/host_attributes.py new/passivetotal-1.0.31/passivetotal/libs/host_attributes.py
--- old/passivetotal-1.0.30/passivetotal/libs/host_attributes.py 1970-01-01 01:00:00.000000000 +0100
+++ new/passivetotal-1.0.31/passivetotal/libs/host_attributes.py 2019-06-13 16:56:57.000000000 +0200
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+"""PassiveTotal API Interface."""
+
+__author__ = 'Brandon Dixon (PassiveTotal)'
+__version__ = '1.0.0'
+
+from passivetotal.api import Client
+# exceptions
+from passivetotal.common.exceptions import MISSING_FIELD
+from passivetotal.common.exceptions import INVALID_FIELD_TYPE
+# const
+from passivetotal.common.const import TRACKER_VALID_FIELDS
+
+
+class HostAttributeRequest(Client):
+
+ """Client to interface with the host attribute calls from the PassiveTotal API."""
+
+ def __init__(self, *args, **kwargs):
+ """Setup the primary client instance."""
+ super(HostAttributeRequest, self).__init__(*args, **kwargs)
+
+ def get_components(self, **kwargs):
+ """Get component data for a value.
+
+ Reference: http://api.passivetotal.org/api/docs/#api-Host_Attributes-GetV2HostAttribute...
+
+ :param query: Value to enrich
+ :return: Dict of results
+ """
+ return self._get('host-attributes', 'components', **kwargs)
+
+ def get_trackers(self, **kwargs):
+ """Get tracker data for a value.
+
+ Reference: http://api.passivetotal.org/api/docs/#api-Host_Attributes-GetV2HostAttribute...
+
+ :param query: Value to enrich
+ :return: Dict of results
+ """
+ return self._get('host-attributes', 'trackers', **kwargs)
+
+ def get_host_pairs(self, **kwargs):
+ """Get host pair data for a value.
+
+ Reference: http://api.passivetotal.org/api/docs/#api-Host_Attributes-GetV2HostAttribute...
+
+ :param query: Value to enrich
+ :return: Dict of results
+ """
+ return self._get('host-attributes', 'pairs', **kwargs)
+
+ def search_trackers_by_type(self, **kwargs):
+ """Search trackers based on query value and type.
+
+ Reference: http://api.passivetotal.org/api/docs/#api-Trackers-GetV2TrackersSearch
+
+ :param str query: Query value to use when making the request for data
+ :param str type: Field to run the query against
+ :return: Tracker matches
+ """
+ if 'type' not in kwargs:
+ raise MISSING_FIELD("Type value is required.")
+ if kwargs['type'] not in WHOIS_VALID_FIELDS:
+ raise INVALID_FIELD_TYPE("Field must be one of the following: %s"
+ % ', '.join(TRACKER_VALID_FIELDS))
+ return self._get('trackers', 'search', **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/libs/ssl.py new/passivetotal-1.0.31/passivetotal/libs/ssl.py
--- old/passivetotal-1.0.30/passivetotal/libs/ssl.py 2016-05-24 22:22:42.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal/libs/ssl.py 2019-06-13 16:56:57.000000000 +0200
@@ -1,15 +1,15 @@
#!/usr/bin/env python
"""PassiveTotal API Interface."""
-
-__author__ = 'Brandon Dixon (PassiveTotal)'
-__version__ = '1.0.0'
-
+from passivetotal.common import utilities
from passivetotal.api import Client
# exceptions
from passivetotal.common.exceptions import MISSING_FIELD
from passivetotal.common.exceptions import INVALID_FIELD_TYPE
# const
+from passivetotal.response import Response
from passivetotal.common.const import SSL_VALID_FIELDS
+__author__ = 'Brandon Dixon (PassiveTotal)'
+__version__ = '1.0.0'
class SslRequest(Client):
@@ -71,3 +71,19 @@
:return: List of matching hits based on the keyword
"""
return self._get('ssl-certificate', 'search', 'keyword', **kwargs)
+
+
+class SSLHistoryResponse(Response):
+ pass
+
+
+class SSLResponse(Response):
+ @property
+ def csv(self):
+ """Output data as CSV.
+
+ :return: String of formatted data
+ """
+ for result in self._results.get('results', []):
+ data = [result.get(detail, '') for detail in SSL_VALID_FIELDS]
+ return utilities.to_csv(SSL_VALID_FIELDS, [data])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal/libs/whois.py new/passivetotal-1.0.31/passivetotal/libs/whois.py
--- old/passivetotal-1.0.30/passivetotal/libs/whois.py 2016-05-24 22:23:57.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal/libs/whois.py 2019-06-13 16:56:57.000000000 +0200
@@ -1,15 +1,17 @@
#!/usr/bin/env python
-"""PassiveTotal API Interface."""
-
-__author__ = 'Brandon Dixon (PassiveTotal)'
-__version__ = '1.0.0'
-
+from passivetotal.common import utilities
from passivetotal.api import Client
# exceptions
from passivetotal.common.exceptions import MISSING_FIELD
from passivetotal.common.exceptions import INVALID_FIELD_TYPE
# const
from passivetotal.common.const import WHOIS_VALID_FIELDS
+from passivetotal.response import Response
+"""PassiveTotal API Interface."""
+
+__author__ = 'Brandon Dixon (PassiveTotal)'
+__version__ = '1.0.0'
+
class WhoisRequest(Client):
@@ -58,3 +60,6 @@
"""
return self._get('whois', 'search', 'keyword', **kwargs)
+
+class WhoisResponse(Response):
+ pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal.egg-info/PKG-INFO new/passivetotal-1.0.31/passivetotal.egg-info/PKG-INFO
--- old/passivetotal-1.0.30/passivetotal.egg-info/PKG-INFO 2016-07-18 19:59:28.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal.egg-info/PKG-INFO 2019-06-13 17:06:53.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: passivetotal
-Version: 1.0.30
+Version: 1.0.31
Summary: Client for the PassiveTotal REST API
Home-page: https://github.com/passivetotal/python_api
Author: Research Team, passivetotal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal.egg-info/SOURCES.txt new/passivetotal-1.0.31/passivetotal.egg-info/SOURCES.txt
--- old/passivetotal-1.0.30/passivetotal.egg-info/SOURCES.txt 2016-07-18 19:59:28.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal.egg-info/SOURCES.txt 2019-06-13 17:06:53.000000000 +0200
@@ -9,7 +9,6 @@
passivetotal.egg-info/dependency_links.txt
passivetotal.egg-info/entry_points.txt
passivetotal.egg-info/not-zip-safe
-passivetotal.egg-info/pbr.json
passivetotal.egg-info/requires.txt
passivetotal.egg-info/top_level.txt
passivetotal/cli/__init__.py
@@ -26,6 +25,7 @@
passivetotal/libs/attributes.py
passivetotal/libs/dns.py
passivetotal/libs/enrichment.py
+passivetotal/libs/host_attributes.py
passivetotal/libs/intelligence.py
passivetotal/libs/ssl.py
passivetotal/libs/whois.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/passivetotal.egg-info/pbr.json new/passivetotal-1.0.31/passivetotal.egg-info/pbr.json
--- old/passivetotal-1.0.30/passivetotal.egg-info/pbr.json 2016-07-18 19:59:28.000000000 +0200
+++ new/passivetotal-1.0.31/passivetotal.egg-info/pbr.json 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-{"is_release": false, "git_version": "1975422"}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/setup.cfg new/passivetotal-1.0.31/setup.cfg
--- old/passivetotal-1.0.30/setup.cfg 2016-07-18 19:59:28.000000000 +0200
+++ new/passivetotal-1.0.31/setup.cfg 2019-06-13 17:06:54.000000000 +0200
@@ -1,5 +1,4 @@
[egg_info]
tag_build =
tag_date = 0
-tag_svn_revision = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/passivetotal-1.0.30/setup.py new/passivetotal-1.0.31/setup.py
--- old/passivetotal-1.0.30/setup.py 2016-07-18 19:59:13.000000000 +0200
+++ new/passivetotal-1.0.31/setup.py 2019-06-13 16:56:57.000000000 +0200
@@ -8,7 +8,7 @@
setup(
name='passivetotal',
- version='1.0.30',
+ version='1.0.31',
description='Client for the PassiveTotal REST API',
url="https://github.com/passivetotal/python_api",
author="Research Team, passivetotal",