Script untuk deteksi website redirection dan IP address menggunakan python

Skenario kali ini adalah jika kita memiliki daftar domain yang ingin kita periksa website redirection nya. Tentunya ini adalah hal yang sederhana jika daftar domain yang harus diperiksa hanya beberapa saja, tapi jika ada ribuan? Jadi lain ceritanya 😀

Disclaimer :

Berikut adalah environment yang digunakan pada saat pengujian script :

[root@indra check_redirection]# rpm -qf `which python`   
python-2.6.6-66.el6_8.x86_64
[root@indra check_redirection]# pip freeze | grep urllib3
urllib3==1.22

Langkah-langkah yang diperlukan:

Script akan saya beri nama checker.py dan memerlukan satu file sebagai input yaitu domain.txt. Berikut adalah isi dari kedua file tersebut.

File checker.py :

#!/usr/bin/env python

'''
Thanks for the great code as usual from stackoverflow (special thanks to Matth : https://stackoverflow.com/users/267781/matth)
https://stackoverflow.com/questions/22492484/how-do-i-get-the-ip-address-from-a-http-request-using-the-requests-library
'''
import sys
import time
import httplib
import urllib3
urllib3.disable_warnings()

def getresponse(self,*args,**kwargs):
    response = self._old_getresponse(*args,**kwargs)
    if self.sock:
        response.peer = self.sock.getpeername()
    else:
        response.peer = None
    return response

httplib.HTTPConnection._old_getresponse = httplib.HTTPConnection.getresponse
httplib.HTTPConnection.getresponse = getresponse

'''
=== End - Matth's codes === 
'''

import requests

def check_peer(resp):
    orig_resp = resp.raw._original_response
    if hasattr(orig_resp,'peer'):
        l = getattr(orig_resp,'peer')
	if l is None:
	   return '[need manual check]'
	else:
	   return l[0]

def check_for_redirects(url):
    try:
        r = requests.get(url, allow_redirects=False, timeout=10)
        if 300 <= r.status_code < 400:
            return r.headers['location']
        else:
	    r1 = requests.get(url,timeout=15)
            return check_peer(r1)
    except requests.exceptions.Timeout:
        return '[timeout]'
    except requests.exceptions.ConnectionError:
        return '[connection error]'
    except requests.exceptions.TooManyRedirects:
	return '[too many redirects]'

def check_domains(urls):
    for url in urls:
        url_to_check = url if url.startswith('http') else "http://%s" % url
        redirect_url = check_for_redirects(url_to_check)
	domain = url_to_check
	domain = domain.replace("http://","")
	if not domain.lower() in redirect_url:
        	print("%s=%s" % (url_to_check, redirect_url))
	else:
		redirect_url = check_for_redirects(redirect_url)
		print("%s=%s" % (url_to_check, redirect_url))


if __name__ == '__main__':
    fname = 'domains.txt'
    try:
        fname = sys.argv[1]
    except IndexError:
        pass
    urls = (l.strip() for l in open(fname).readlines())
    check_domains(urls)

Dan file domain.txt berisi daftar domain yang akan kita kerjakan.

indrahartawan.com
exabytes.co.id
indrahartawan.id
dzaky.id

Cara eksekusi script :

Pastikan execute permission sudah ditambahkan ke file checker.py dan file domain.txt ada di folder yang sama.

Semoga bermanfaat. Happy coding! Salam SysAdmin!

Oh iya, sharing sedikit. Jika membutuhkan jasa hosting VPS SSD (KVM) berkualitas bisa mungkin paket hosting ini yang Anda cari!

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.