forked from BSDCafe/checkmyip
Created API Client
This commit is contained in:
parent
499a2b8239
commit
e24e8c9476
2 changed files with 95 additions and 10 deletions
69
README.md
69
README.md
|
@ -1,15 +1,34 @@
|
||||||
# CheckMyIP
|
# CheckMyIP ![CheckMyIP][logo]
|
||||||
A Telnet and SSH based IP Lookup Service
|
A Telnet and SSH based IP Lookup Service
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
### VERSION ###
|
||||||
|
The version of CheckMyIP documented here is: **v1.0.0**
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
### TABLE OF CONTENTS ###
|
||||||
|
1. [What is CheckMyIP](#what-is-checkmyip)
|
||||||
|
2. [How to Use](#how-to-use)
|
||||||
|
3. [Install Process](#install-process)
|
||||||
|
4. [Using the API](#using-the-api)
|
||||||
|
5. [Contributing](#contributing)
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
### WHAT IS CHECKMYIP ###
|
||||||
|
Everybody has used a service like [WhatIsMyIP.com](#whatismyip) before. If you are an IT engineer or even an amateur technology enthusiast, then you have probably had a reason to check to see your public IP address. This service works great when a browser is available, but at times it is not. We often find ourselves logged into a remote Linux machine or a network switch/router which has a command line and terminal clients (Telnet and SSH), but no browser. The CheckMyIP app and the **TelnetMyIP.com** and **SSHMyIP.com** public services were created with this in mind.
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
### HOW TO USE ###
|
||||||
|
Using the public **TelnetMyIP.com** and **SSHMyIP.com** services is pretty easy: simply connect to them with a terminal client. You can use a telnet client with TCP port 23 (`telnet telnetmyip.com`), or a SSH client with TCP port 22 (`ssh telnetmyip.com`). The SSH connection requires no authentication, but your SSH client may require you to enter a username, you can use anything you want as it gets ignored anyways(`ssh -limrootbitch telnetmyip.com`).
|
||||||
|
|
||||||
|
To enable the use of this service as a simple API, the response to queries is formatted as a JSON document. See the [Using the API](#using-the-api) section.
|
||||||
|
|
||||||
|
|
||||||
## Install Process
|
-----------------------------------------
|
||||||
|
### INSTALL PROCESS ###
|
||||||
Change Linux SSH Port to TCP222 and reboot
|
Change Linux SSH Port to TCP222 and reboot
|
||||||
```
|
```
|
||||||
sudo sed -i --follow-symlinks 's/#Port 22/Port 222/g' /etc/ssh/sshd_config
|
sudo sed -i --follow-symlinks 's/#Port 22/Port 222/g' /etc/ssh/sshd_config
|
||||||
|
@ -36,18 +55,18 @@ mkdir -p /etc/checkmyip/
|
||||||
Create Service (`vi /etc/init.d/checkmyip`)
|
Create Service (`vi /etc/init.d/checkmyip`)
|
||||||
```
|
```
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# radiuid daemon
|
# checkmyip daemon
|
||||||
# chkconfig: 345 20 80
|
# chkconfig: 345 20 80
|
||||||
# description: RADIUS to Palo-Alto User-ID Engine
|
# description: CheckMyIP Daemon
|
||||||
# processname: radiuid
|
# processname: checkmyip
|
||||||
|
|
||||||
DAEMON_PATH="/bin/"
|
DAEMON_PATH="/bin/"
|
||||||
|
|
||||||
DAEMON=radiuid
|
DAEMON=checkmyip
|
||||||
DAEMONOPTS="run"
|
#DAEMONOPTS="run"
|
||||||
|
|
||||||
NAME=RadiUID
|
NAME=CheckMyIP
|
||||||
DESC="RADIUS to Palo-Alto User-ID Engine"
|
DESC="CheckMyIP Daemon"
|
||||||
PIDFILE=/var/run/$NAME.pid
|
PIDFILE=/var/run/$NAME.pid
|
||||||
SCRIPTNAME=/etc/init.d/$NAME
|
SCRIPTNAME=/etc/init.d/$NAME
|
||||||
|
|
||||||
|
@ -108,3 +127,33 @@ esac
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Finish and Start Up Service
|
||||||
|
```
|
||||||
|
chmod 777 /etc/init.d/checkmyip
|
||||||
|
chkconfig checkmyip on
|
||||||
|
service checkmyip start
|
||||||
|
service checkmyip status
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
### USING THE API ###
|
||||||
|
The CheckMyIP code contains the `CheckMyIP_Client` class which is an API client example which can be used to query a CheckMyIP server (like telnetmyip.com). Below is an example of how you can use it.
|
||||||
|
|
||||||
|
```
|
||||||
|
from checkmyip import CheckMyIP_Client
|
||||||
|
|
||||||
|
client = CheckMyIP_Client()
|
||||||
|
ipdict = client.get()
|
||||||
|
print("My IP is %s" % ipdict["ip"])
|
||||||
|
print("I used port number %s" % ipdict["port"])
|
||||||
|
```
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
### CONTRIBUTING ###
|
||||||
|
If you would like to help out by contributing code or reporting issues, please do!
|
||||||
|
|
||||||
|
Visit the GitHub page (https://github.com/packetsar/checkmyip) and either report an issue or fork the project, commit some changes, and submit a pull request.
|
||||||
|
|
||||||
|
[logo]: http://www.packetsar.com/wp-content/uploads/checkmyip_icon-100.gif
|
||||||
|
[whatismyip]: https://www.whatismyip.com/
|
||||||
|
|
36
checkmyip.py
36
checkmyip.py
|
@ -197,6 +197,42 @@ def start():
|
||||||
quit()
|
quit()
|
||||||
|
|
||||||
|
|
||||||
|
class CheckMyIP_Client:
|
||||||
|
def __init__(self):
|
||||||
|
self._json = __import__('json') # Import the JSON library
|
||||||
|
self._socket = __import__('socket') # Import the socket library
|
||||||
|
self._data = None # Initialize the _data variable
|
||||||
|
self._af = "auto" # Set the IP address family type to "auto"
|
||||||
|
self.server = "telnetmyip.com" # Set the default CheckMyIP server
|
||||||
|
def get(self): # Primary method to run IP check
|
||||||
|
if self._af == "auto": # If we are using an auto address family
|
||||||
|
try: # Try using IPv6
|
||||||
|
sock = self._socket.socket(self._socket.AF_INET6,
|
||||||
|
self._socket.SOCK_STREAM)
|
||||||
|
sock.connect((self.server, 23))
|
||||||
|
except: # Fall back to IPv4 if IPv6 fails
|
||||||
|
sock = self._socket.socket(self._socket.AF_INET,
|
||||||
|
self._socket.SOCK_STREAM)
|
||||||
|
sock.connect((self.server, 23))
|
||||||
|
elif self._af == "ipv6": # If we are using the IPv6 address family
|
||||||
|
sock = self._socket.socket(self._socket.AF_INET6,
|
||||||
|
self._socket.SOCK_STREAM)
|
||||||
|
sock.connect((self.server, 23))
|
||||||
|
elif self._af == "ipv4": # If we are using the IPv4 address family
|
||||||
|
sock = self._socket.socket(self._socket.AF_INET,
|
||||||
|
self._socket.SOCK_STREAM)
|
||||||
|
sock.connect((self.server, 23))
|
||||||
|
self._data = sock.recv(1024) # Recieve data from the buffer
|
||||||
|
sock.close() # Close the socket
|
||||||
|
return self._json.loads(self._data) # Return the JSON data
|
||||||
|
def set_family(self, family): # Method to set the IP address family
|
||||||
|
allowed = ["auto", "ipv4", "ipv6"] # Allowed input values
|
||||||
|
if family in allowed:
|
||||||
|
self._af = family
|
||||||
|
else:
|
||||||
|
raise Exception("Allowed families are 'auto', 'ipv4', 'ipv6'")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
logging = log_management()
|
logging = log_management()
|
||||||
start()
|
start()
|
Loading…
Reference in a new issue