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!