être notifié lorsqu'un utilisateur se connecte en SSH
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. ## Utilisez la commande 'python3 -m pip install cowsay' pour ajouter ce MOTD.
  4. ## Sinon, supprimez cette partie du programme jusqu'au prochain commentaire
  5. import socket
  6. import cowsay
  7. ## Editez le fichier config.py pour y mettre les bonnes variables.
  8. #cowsay.ghostbusters("SSH-Notifier \n The owner has been notified of this login")
  9. ## importation des dependances
  10. import re
  11. import sys
  12. from config import config
  13. sys.path.insert(1, config["plateform_directory"])
  14. from telegram import telegram_send_message
  15. from discord import discord_send_message
  16. import os
  17. import subprocess
  18. import json
  19. import requests
  20. #Pattern pour reconnaitre une IP
  21. ip_pattern = "(?:^|\b(?<!\.))(?:1?\d\d?|2[0-4]\d|25[0-5])(?:\.(?:1?\d\d?|2[0-4]\d|25[0-5])){3}(?=$|[^\w.])"
  22. def main():
  23. out = subprocess.Popen(['tail', '-3', '/var/log/auth.log'],
  24. stdout=subprocess.PIPE,
  25. stderr=subprocess.STDOUT)
  26. stdout,stderr = out.communicate()
  27. resultat = stdout.decode('ascii')
  28. auth = resultat.split(' ')
  29. for i in range(len(auth)):
  30. line = auth[i]
  31. if find_ip(line) != None :
  32. IP = line
  33. where = geoip(IP)
  34. message = "Nouvelle connexion sur " + socket.gethostname() + " Provenant de " + IP + '\n' + 'Pays : ' + where['countryName'] + '\n' + 'Ville : ' + where['cityName'] + '\n' + 'Code Postal : ' + where['zipCode']
  35. if config["plateform"] == 'telegram' :
  36. telegram_send_message(message)
  37. if config["plateform"] == 'discord' :
  38. discord_send_message(message)
  39. def find_ip(str) :
  40. pattern = re.compile(ip_pattern)
  41. ip = re.match(pattern, str)
  42. return ip
  43. def geoip(ip):
  44. key = config['ipinfodb_key']
  45. url_api = 'http://api.ipinfodb.com/v3/ip-city/?key=' + key + '&ip=' + ip + "&format=json"
  46. localisation = requests.get(url_api)
  47. if str(localisation) != '<Response [200]>' :
  48. print("Mauvaise réponse de l'api")
  49. return "Echec de la recuperation du lieu"
  50. data = localisation
  51. return data.json()
  52. if __name__ == '__main__':
  53. main()