Network Tools API Documentation¶
Network tools is a set of RESTful JSON API tools designed to help with everyday work of sysadmins. This API is best with scripts since it’s output is JSON.
Access is protected by an IP allow list. If you need to grant access to new IP go to settings.py and append new IP at the end of ALLOWED_IPS list.
All endpoints can be rate limited by specifying number of requests in settings.py.
Ratelimiting is also supported. Define ratelimiting in settings.py. ACL is supported through whitelist in settings.py.
API Documentation¶
-
GET/plain¶ Curl / copy friendly external IP information. Could be wrong if behind proxy. :return: Public IP address of requestor
-
GET/¶ Simple page with user’s IP address information :return: What Is My IP page
-
GET/api/ipcalc/(string: query)/(string: netmask)¶
-
GET/api/ipcalc/(string: query)¶ IP calculator tool: supports IPv6 and IPv4 networks. For list of values see below.
IP list is optional since it will return many IPs for some subnets, if you need to show ip list you will have to append
?iplistto your get request.PLEASE NOTE: iplist will print only 65536 addresses which is /16 in IPv4 subnetting or /112 in IPv6 subnetting. If you try to get more you will get an error.
Parameters: - query – IP address or hostname
- netmask – (Optional) If you want the whole range of hosts
Example:
When getting single host
$ GET
/api/ipcalc/199.16.156.102/30{ "results": { "broadcast": "199.16.156.103", "cidr": "199.16.156.100/30", "first_host": "199.16.156.101", "hostmask": "0.0.0.3", "ip_bits": "11000111.00010000.10011100.01100110", "ip_version": 4, "is_linklocal": false, "is_loopback": false, "is_multicast": false, "is_private": false, "is_public": true, "is_reserved": false, "is_unicast": true, "last_host": "199.16.156.102", "netmask": "255.255.255.252", "netmask_bits": "11111111.11111111.11111111.11111100", "network": "199.16.156.100", "network_bits": "11000111.00010000.10011100.01100100", "num_addresses": 4, "prefixlen": 30, "supernet": [ "0.0.0.0/0", "128.0.0.0/1", "192.0.0.0/2", "192.0.0.0/3", "192.0.0.0/4", "192.0.0.0/5", "196.0.0.0/6", "198.0.0.0/7", "199.0.0.0/8", "199.0.0.0/9", "199.0.0.0/10", "199.0.0.0/11", "199.16.0.0/12", "199.16.0.0/13", "199.16.0.0/14", "199.16.0.0/15", "199.16.0.0/16", "199.16.128.0/17", "199.16.128.0/18", "199.16.128.0/19", "199.16.144.0/20", "199.16.152.0/21", "199.16.156.0/22", "199.16.156.0/23", "199.16.156.0/24", "199.16.156.0/25", "199.16.156.64/26", "199.16.156.96/27", "199.16.156.96/28", "199.16.156.96/29" ], "to_ipv6": "::ffff:199.16.156.102/126" }, "status": "ok" }
-
GET/api/host/(string: query)/(string: netmask)¶
-
GET/api/host/(string: query)¶ Shows IP’s that are pingable and those that are not. Accepts netmask to define the whole range for scan. Uses NMAP’s -sP to probe hosts. Probing is done from Hosting machine and therefore not suitable for scanning local network ranges. Useful when checking how many IP’s you have left in a particular netmask.
Parameters: - query – IP address or hostname
- netmask – (Optional) If you want to scan the whole range of hosts
Example:
$ GET
/api/host/199.16.156.102/29{ "down": [ "199.16.156.100", "199.16.156.101", "199.16.156.96", "199.16.156.97", "199.16.156.98", "199.16.156.99" ], "hosts": [ { "host": "199.16.156.100", "hostname": [], "status": "down" }, { "host": "199.16.156.101", "hostname": [], "status": "down" }, { "host": "199.16.156.102", "hostname": [], "status": "up" }, { "host": "199.16.156.103", "hostname": [], "status": "up" }, { "host": "199.16.156.96", "hostname": [], "status": "down" }, { "host": "199.16.156.97", "hostname": [], "status": "down" }, { "host": "199.16.156.98", "hostname": [], "status": "down" }, { "host": "199.16.156.99", "hostname": [], "status": "down" } ], "status": "ok", "up": [ "199.16.156.102", "199.16.156.103" ] }
-
GET/api/nmap/(string: query)/(netmask)¶
-
GET/api/nmap/(string: query)¶ Scans host or whole subnet for hosts and their open ports. Uses NMAP’s -T4 -F params to probe hosts. Probing is done from Hosting machine and therefore not suitable for scanning local network ranges.
Parameters: - query – IP address or hostname
- netmask – (Optional) If you want to scan the whole range of hosts
Example:
$ GET
/api/nmap/199.16.156.102/30Returns:
{ "hosts": [ { "host": "199.16.156.102", "status": { "addresses": { "ipv4": "199.16.156.102" }, "hostnames": [], "status": { "reason": "syn-ack", "state": "up" }, "tcp": { "80": { "conf": "3", "cpe": "", "extrainfo": "", "name": "http", "product": "", "reason": "syn-ack", "state": "open", "version": "" }, "443": { "conf": "3", "cpe": "", "extrainfo": "", "name": "https", "product": "", "reason": "syn-ack", "state": "open", "version": "" }, "8888": { "conf": "3", "cpe": "", "extrainfo": "", "name": "sun-answerbook", "product": "", "reason": "syn-ack", "state": "open", "version": "" } }, "vendor": {} } }, { "host": "199.16.156.103", "status": { "addresses": { "ipv4": "199.16.156.103" }, "hostnames": [], "status": { "reason": "syn-ack", "state": "up" }, "tcp": { "80": { "conf": "3", "cpe": "", "extrainfo": "", "name": "http", "product": "", "reason": "syn-ack", "state": "open", "version": "" }, "443": { "conf": "3", "cpe": "", "extrainfo": "", "name": "https", "product": "", "reason": "syn-ack", "state": "open", "version": "" }, "8888": { "conf": "3", "cpe": "", "extrainfo": "", "name": "sun-answerbook", "product": "", "reason": "syn-ack", "state": "open", "version": "" } }, "vendor": {} } } ], "status": "ok" }
-
GET/api/ipwhois/(string: ipquery)¶ IP whois query, accepts IP or FQDN. FQDN is resolved to ip and then queried for ipwhois data. Returns IP address and network’s registered user.
Parameters: - ipquery – IP or FQDN
Example:
GET:
/api/ipwhois/84.20.255.11{ ipwhois: [ { asn: "15169", asn_cidr: "8.8.8.0/24", asn_country_code: "US", asn_date: "", asn_registry: "arin", nets: [ { address: "1025 Eldorado Blvd.", cidr: "8.0.0.0/8", city: "Broomfield", country: "US", created: "1992-12-01", description: "Level 3 Communications, Inc.", emails: "noc.coreip@level3.com abuse@level3.com ipaddressing@level3.com", handle: "NET-8-0-0-0-1", name: "LVLT-ORG-8-8", postal_code: "80021", range: "8.0.0.0 - 8.255.255.255", state: "CO", updated: "2012-02-24" }, { address: "1600 Amphitheatre Parkway", cidr: "8.8.8.0/24", city: "Mountain View", country: "US", created: "2014-03-14", description: "Google Inc.", emails: "network-abuse@google.com arin-contact@google.com", handle: "NET-8-8-8-0-1", name: "LVLT-GOGL-8-8-8", postal_code: "94043", range: null, state: "CA", updated: "2014-03-14" } ], query: "8.8.8.8", raw: null, raw_referral: null, referral: null } ], status: "ok" } }
-
GET/api/geoip/(string: query)¶ Geoip query, accepts IP or FQDN. FQDN is resolved to ip and then queried for geoip data. Google maps url in response for quick access. Distance available in metric and imperial measurements. Defaults to metric. Add
?imperialto get distance in miles.Parameters: - query – IP or FQDN
Example:
GET:
/api/nmap/8.8.8.8{ "geoip": [ { "area_code": 650, "city": "Mountain View", "continent": "NA", "country_code": "US", "country_code3": "USA", "country_name": "United States", "distance": 830 "distance_unit": "km" "dma_code": 807, "google_maps_url": "http://maps.google.com/maps?q=loc:37.386,-122.0838", "ip": "8.8.8.8", "isp": "Google", "latitude": 37.385999999999996, "longitude": -122.0838, "metro_code": "San Francisco, CA", "postal_code": "94040", "region_code": "CA", "time_zone": "America/Los_Angeles" }], "resolved_ips": [ "8.8.8.8" ], "status": "ok" }
-
GET/api/whois/(string: query)¶ Whois query, accepts IP or FQDN. FQDN is resolved to ip and then queried for ipwhois data.
Parameters: - query – IP or FQDN
Example:
$ GET
/api/whois/1-up.xyz{ status: "ok", whois: { contacts: { admin: { city: "Panama", country: "PA", email: "5cc1435e8bae40bf8275d28a2150b6bf.protect@whoisguard.com", fax: "+51.17057182", handle: "C44073503-CNIC", name: "WhoisGuard Protected", organization: "WhoisGuard, Inc.", phone: "+507.8365503", postalcode: "00000", state: "Panama", street: "P.O. Box 0823-03411" }, billing: { city: "Panama", country: "PA", email: "5cc1435e8bae40bf8275d28a2150b6bf.protect@whoisguard.com", fax: "+51.17057182", handle: "C44073504-CNIC", name: "WhoisGuard Protected", organization: "WhoisGuard, Inc.", phone: "+507.8365503", postalcode: "00000", state: "Panama", street: "P.O. Box 0823-03411" }, registrant: { city: "Panama", country: "PA", email: "5cc1435e8bae40bf8275d28a2150b6bf.protect@whoisguard.com", fax: "+51.17057182", handle: "C44073500-CNIC", name: "WhoisGuard Protected", organization: "WhoisGuard, Inc.", phone: "+507.8365503", postalcode: "00000", state: "Panama", street: "P.O. Box 0823-03411" }, tech: { city: "Panama", country: "PA", email: "5cc1435e8bae40bf8275d28a2150b6bf.protect@whoisguard.com", fax: "+51.17057182", handle: "C44073507-CNIC", name: "WhoisGuard Protected", organization: "WhoisGuard, Inc.", phone: "+507.8365503", postalcode: "00000", state: "Panama", street: "P.O. Box 0823-03411" } }, creation_date: [ "Thu, 10 Mar 2016 12:13:09 GMT" ], emails: [ "abuse@namecheap.com" ], expiration_date: [ "Fri, 10 Mar 2017 23:59:59 GMT" ], id: [ "D18499062-CNIC" ], nameservers: [ "dns1.registrar-servers.com", "dns2.registrar-servers.com", "dns3.registrar-servers.com", "dns4.registrar-servers.com", "dns5.registrar-servers.com" ], raw: [ "Domain name: 1-up.xyz Registry Domain ID: D18499062-CNIC Registrar WHOIS Server: whois.namecheap.com ... For more information, please see https://registrar-console.centralnic.com/pub/whois_guidance. " ], registrar: [ "NAMECHEAP INC" ], status: [ "clientTransferProhibited", "serverTransferProhibited", "addPeriod" ], updated_date: [ "Thu, 10 Mar 2016 12:13:12 GMT" ], whois_server: [ "whois.namecheap.com" ] } }
-
GET/api/dns/(string: query)¶ DNS query, accepts IP or FQDN. FQDN is resolved to ip and then queried for dns data. You can specify multiple alternative DNS server to query by specifying
?q=<dns_ip1>,<dns_ip2>. If you do not specify DNS servers with?q=default server are8.8.8.8,8.8.4.4:returns Host records (A), MX records, NS records, SOA, TXT records
Parameters: - query – IP or FQDN
Example:
$ GET
/api/dns/1-up.xyz{ "hosts": { "records": [ { "address": "162.255.119.250", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "type": "A" } ] }, "mx": { "records": [ { "address": "eforward1.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "priority": "10", "type": "MX" }, { "address": "eforward4.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "priority": "15", "type": "MX" }, { "address": "eforward5.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "priority": "20", "type": "MX" }, { "address": "eforward2.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "priority": "10", "type": "MX" }, { "address": "eforward3.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "priority": "10", "type": "MX" } ] }, "ns": { "records": [ { "address": "dns2.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "type": "NS" }, { "address": "dns1.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "type": "NS" }, { "address": "dns3.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "type": "NS" }, { "address": "dns5.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "type": "NS" }, { "address": "dns4.registrar-servers.com.", "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "type": "NS" } ] }, "soa": { "records": [ { "class": "IN", "dns_contact": "hostmaster.registrar-servers.com.", "expire": "604800", "expires_in": "3600", "minimum": "3601", "name": "1-up.xyz.", "primary_ns": "dns1.registrar-servers.com.", "refresh": "43200", "retry": "3600", "serial": "2016031003", "type": "SOA" } ] }, "status": "ok", "txt": { "records": [ { "class": "IN", "expires_in": "1799", "name": "1-up.xyz.", "string": ""v=spf1 include:spf.efwd.registrar-servers.com ~all"", "type": "TXT" } ] } }