From: Jason Ish Date: Fri, 1 Dec 2017 19:52:32 +0000 (-0600) Subject: use a custom user agent X-Git-Tag: 1.0.0a1~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=11439cbcc07e0ddf93c0b272d2463c686a7b14ad;p=thirdparty%2Fsuricata-update.git use a custom user agent Includes Suricata-Update version, Suricata version, OS name and processor architecture. --- diff --git a/suricata/update/engine.py b/suricata/update/engine.py index c890f9e..bc4ef24 100644 --- a/suricata/update/engine.py +++ b/suricata/update/engine.py @@ -91,7 +91,7 @@ def get_path(program="suricata"): return None def parse_version(buf): - m = re.search("((\d+)\.(\d+)(\.(\d+))?(\w+)?)", str(buf).strip()) + m = re.search("((\d+)\.(\d+)(\.(\d+))?([\w\-]+)?)", str(buf).strip()) if m: full = m.group(1) major = int(m.group(2)) diff --git a/suricata/update/main.py b/suricata/update/main.py index 39dea7f..4ce6913 100644 --- a/suricata/update/main.py +++ b/suricata/update/main.py @@ -1261,6 +1261,8 @@ def _main(): suricata_version = suricata.update.engine.parse_version( DEFAULT_SURICATA_VERSION) + suricata.update.net.set_user_agent_suricata_version(suricata_version.full) + file_tracker = FileTracker() disable_matchers = [] diff --git a/suricata/update/net.py b/suricata/update/net.py index f7ed653..fa85bee 100644 --- a/suricata/update/net.py +++ b/suricata/update/net.py @@ -17,18 +17,45 @@ """ Module for network related operations. """ +import platform + try: # Python 3.3... - from urllib.request import urlopen + from urllib.request import urlopen, build_opener from urllib.error import HTTPError except ImportError: # Python 2.6, 2.7. - from urllib2 import urlopen + from urllib2 import urlopen, build_opener from urllib2 import HTTPError +from suricata.update.version import version + # Number of bytes to read at a time in a GET request. GET_BLOCK_SIZE = 8192 +user_agent_suricata_verison = "Unknown" + +def set_user_agent_suricata_version(version): + global user_agent_suricata_verison + user_agent_suricata_verison = version + +def build_user_agent(): + params = [] + + uname_system = platform.uname()[0] + + params.append("OS: %s" % (uname_system)) + params.append("CPU: %s" % (platform.processor())) + params.append("Python: %s" % (platform.python_version())) + + if uname_system == "Linux": + distribution = platform.linux_distribution() + params.append("Dist: %s/%s" % ( + str(distribution[0]), str(distribution[1]))) + + return "Suricata-Update/%s (%s)" % ( + version, "; ".join(params)) + def get(url, fileobj, progress_hook=None): """ Perform a GET request against a URL writing the contents into the provideded file like object. @@ -44,7 +71,14 @@ def get(url, fileobj, progress_hook=None): provided fileobj may occur. """ - remote = urlopen(url) + user_agent = build_user_agent() + + opener = build_opener() + opener.addheaders = [ + ("User-Agent", build_user_agent()), + ] + + remote = opener.open(url) info = remote.info() try: content_length = int(info["content-length"])