Skip to content

Repository files navigation

SimpleHTTPserver

Go alternative of python SimpleHTTPServer

FeaturesUsageInstallationRun SimpleHTTPserverJoin Discord


SimpleHTTPserver is a go enhanced version of the well known python simplehttpserver with in addition a fully customizable TCP server, both supporting TLS.

Features

  • HTTP/S Web Server
  • File Server with arbitrary directory support
  • HTTP request/response dump
  • Configurable ip address and listening port
  • Configurable HTTP/TCP server with customizable response via YAML template

Installing SimpleHTTPserver

SimpleHTTPserver requires go1.17+ to install successfully. Run the following command to get the repo -

go install -v github.com/projectdiscovery/simplehttpserver/cmd/simplehttpserver@latest

Usage

simplehttpserver -h

This will display help for the tool. Here are all the switches it supports.

FlagDescriptionExample
-listenConfigure listening ip:port (default 127.0.0.1:8000)simplehttpserver -listen 127.0.0.1:8000
-pathFileserver folder (default current directory)simplehttpserver -path /var/docs
-verboseVerbose (dump request/response, default false)simplehttpserver -verbose
-tcpTCP server (default 127.0.0.1:8000)simplehttpserver -tcp 127.0.0.1:8000
-tlsEnable TLS for TCP serversimplehttpserver -tls
-rulesFile containing yaml rulessimplehttpserver -rules rule.yaml
-uploadEnable file upload in case of http serversimplehttpserver -upload
-max-file-sizeMax Upload File Size (default 50 MB)simplehttpserver -max-file-size 100
-sandboxEnable sandbox modesimplehttpserver -sandbox
-httpsEnable HTTPS in case of http serversimplehttpserver -https
-http1Enable only HTTP1simplehttpserver -http1
-certHTTPS/TLS certificate (self generated if not specified)simplehttpserver -cert cert.pem
-keyHTTPS/TLS certificate private keysimplehttpserver -key cert.key
-domainDomain name to use for the self-generated certificatesimplehttpserver -domain projectdiscovery.io
-corsEnable cross-origin resource sharing (CORS)simplehttpserver -cors
-basic-authBasic auth (username:password)simplehttpserver -basic-auth user:password
-realmBasic auth messagesimplehttpserver -realm "insert the credentials"
-versionShow versionsimplehttpserver -version
-silentShow only resultssimplehttpserver -silent
-pyEmulate Python Stylesimplehttpserver -py
-headerHTTP response header (can be used multiple times)simplehttpserver -header 'X-Powered-By: Go'

Running simplehttpserver in the current folder

This will run the tool exposing the current directory on port 8000

simplehttpserver
2021/01/11 21:40:48 Serving . on http://0.0.0.0:8000/...
2021/01/11 21:41:15 [::1]:50181 "GET / HTTP/1.1" 200 383
2021/01/11 21:41:15 [::1]:50181 "GET /favicon.ico HTTP/1.1" 404 19

Running simplehttpserver in the current folder with HTTPS

This will run the tool exposing the current directory on port 8000 over HTTPS with user provided certificate:

simplehttpserver -https -cert cert.pen -key cert.key
2021/01/11 21:40:48 Serving . on http://0.0.0.0:8000/...
2021/01/11 21:41:15 [::1]:50181 "GET / HTTP/1.1" 200 383
2021/01/11 21:41:15 [::1]:50181 "GET /favicon.ico HTTP/1.1" 404 19

Instead, to run with self-signed certificate and specific domain name:

simplehttpserver -https -domain localhost
2021/01/11 21:40:48 Serving . on http://0.0.0.0:8000/...
2021/01/11 21:41:15 [::1]:50181 "GET / HTTP/1.1" 200 383
2021/01/11 21:41:15 [::1]:50181 "GET /favicon.ico HTTP/1.1" 404 19

Running simplehttpserver with basic auth and file upload

This will run the tool and will request the user to enter username and password before authorizing file uploads

simplehttpserver -basic-auth root:root -upload
2021/01/11 21:40:48 Serving . on http://0.0.0.0:8000/...

To upload files use the following curl request with basic auth header:

curl -v --user 'root:root' --upload-file file.txt http://localhost:8000/file.txt

Running TCP server with custom responses

This will run the tool as TLS TCP server and enable custom responses based on YAML templates:

simplehttpserver -rules rules.yaml -tcp -tls -domain localhost

The rules are written as follows:

rules:
- match: regex-matchmatch-contains: literal-matchname: rule-nameresponse: response data

For example to handle two different paths simulating an HTTP server or SMTP commands:

rules:
# HTTP Requests
- match: GET /path1name: redirectresponse: | HTTP/1.0 200 OK Server: httpd/2.0 x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block Date: Fri, 16 Apr 2021 14:30:32 GMT Content-Type: text/html Connection: close <HTML><HEAD><script>top.location.href='/Main_Login.asp';</script> </HEAD></HTML> - match: GET /path2name: "404"response: | HTTP/1.0 404 OK Server: httpd/2.0 <HTML><HEAD></HEAD><BODY>Not found</BODY></HTML># SMTP Commands
- match: "EHLO example.com"name: smtp response: | 250-localhost Nice to meet you, [127.0.0.1] 250-PIPELINING 250-8BITMIME 250-SMTPUTF8 250-AUTH LOGIN PLAIN 250 STARTTLS - match: "MAIL FROM: <noreply@example.com>"response: 250 Accepted
- match: "RCPT TO: <test@example.com>"response: 250 Accepted
- match-contains: !!binary |MAwCAQFgBwIBAwQAgAA=name: "ldap"# Request: 300c 0201 0160 0702 0103 0400 8000 0....`........# Response: 300c 0201 0161 070a 0100 0400 0400 0....a........response: !!binary |MAwCAQFhBwoBAAQABAA=

Note

  • This project is intended for development purposes only; it should not be used in production.

Thanks

SimpleHTTPserver is made with 🖤 by the projectdiscovery team.

About

Go alternative of python SimpleHTTPServer

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

543 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages