Skip to content

Instantly share code, notes, and snippets.

@rahulunair
Created June 17, 2016 19:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rahulunair/3a5a449027be9ba0f2723c6f11426a2d to your computer and use it in GitHub Desktop.
Save rahulunair/3a5a449027be9ba0f2723c6f11426a2d to your computer and use it in GitHub Desktop.
# Copyright 2016 Intel
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import syntribos.signal
def server_software(resp):
"""Fingerprints the server and possible version.
Reads response headers and if server software information is present,
returns a signal with server software slug.
:returns: SynSignal
"""
try:
server_soft = resp.headers["Server"]
except:
try:
server_soft = resp.headers["Powered-by"]
except:
try:
server_soft = resp.headers["x-server-name"]
except:
webserver = "UNKNOWN"
else:
webserver = "WEBSPHERE"
else:
if 'Express' in server_soft:
webserver = "EXPRESS"
if 'Servlet' in server_soft:
webserver = "TOMCAT"
else:
if "Apache" in server_soft:
webserver = "APACHE"
elif "nginx" in server_soft:
webserver = "NGINX"
elif "Microsoft-IIS" in server_soft:
webserver = "IIS"
elif "Oracle" in server_soft:
webserver = "ORACLE"
elif "IBM_HTTP_Server" in server_soft:
webserver = "IBM"
elif "AmazonS3" in server_soft:
webserver = "AMAZON"
elif "GSE" in server_soft:
webserver = "GSE"
elif "lighttpd" in server_soft:
webserver = "LIGHTTPD"
elif "WSGIServer" in server_soft:
webserver = "WSGI"
else:
webserver = "UNKNOWN"
try:
version = server_soft.split('/')[1]
except:
version = 0
text = (
"Server Details:\n"
"\tServer Software: {0}\n"
"\tServer Version: {1}\n").format(webserver, version)
slug = "SERVER_SOFTWARE_{0}".format(webserver)
return syntribos.signal.SynSignal(text=text, slug=slug, strength=1)
def remote_os(resp):
"""Returns remote OS info.
Tries to identiy which OS is running on the remote server
:returns: SynSignal
"""
try:
remote_os = resp.headers['X-Distribution']
except:
remote_os = "UNKNOWN"
text = (
"Remote OS Details:\n"
"\tServer OS: {0}\n").format(remote_os)
slug = "SERVER_OS_{0}".format(remote_os)
return syntribos.signal.SynSignal(text=text, slug=slug, strength=1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment