istemci-port-tarama.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from ftplib import FTP
  2. import sys
  3. import os
  4. import time
  5. import subprocess
  6. from dacid_dht import Dht
  7. #dhtsunucu=None # 10.45.2.127:1923
  8. dhtsunucu="10.45.2.129:1923"
  9. raporlama_dizin="/tmp/raporlama/"
  10. subprocess.call(['mkdir',"-p",raporlama_dizin])
  11. def get_interface():
  12. for index, item in enumerate(os.listdir("/sys/class/net")):
  13. if "wg" in item:
  14. return item
  15. f = os.popen('ifconfig '+get_interface()+' | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
  16. HOST=f.read().strip('\n')
  17. def getFile(ftp, fname):
  18. try:
  19. filename=raporlama_dizin+fname
  20. bfile = os.path.basename(fname)
  21. ftp.retrbinary("RETR " + bfile ,open(filename, 'wb').write)
  22. print ("Success:",filename,"got")
  23. return True
  24. except:
  25. print ("Error:",filename,"cant get")
  26. os.remove(filename)
  27. return False
  28. def upload(ftp, ifile):
  29. bfile = os.path.basename(ifile)
  30. ext = os.path.splitext(ifile)[1]
  31. if ext in (".txt", ".htm", ".html"):
  32. ftp.storlines("STOR " + bfile, open(ifile))
  33. else:
  34. ftp.storbinary("STOR " + bfile, open(ifile, "rb"), 1024)
  35. #dht den gelen bilgilerle host,port,servis kanalı belirlenecek
  36. dht=Dht(bs=dhtsunucu)
  37. sunucular=dht.sunucular()
  38. print (sunucular)
  39. if sunucular:
  40. for sunucu in sunucular:
  41. shost=sunucu.split(":")[0]
  42. sport=int(sunucu.split(":")[1])
  43. ftp = FTP()
  44. ftp.connect(shost,sport)
  45. ftp.login()
  46. id=ftp.getmultiline()
  47. print (ftp.getwelcome(),"sunucusuna hoşgeldiniz")
  48. print("istemci id:",id)
  49. # sunucuda tanımlı servisler çekilir
  50. #ftp.retrlines('LIST')
  51. #print ("servisler:","\n",servisler)
  52. service_1="port-tarama/"
  53. try:
  54. ftp.cwd(service_1+id)
  55. except Exception as e:
  56. print (service_1,str(e))
  57. # break process for this server loop
  58. print (service_1," işlemi gerçekleştirilemedi.")
  59. continue
  60. #getFile(ftp,'help')
  61. data = []
  62. ftp.dir(data.append)
  63. #eski istek/rapor sil
  64. subprocess.call(['rm',"-rf",raporlama_dizin+"istek",raporlama_dizin+"rapor"])
  65. # port tarama için client kendi host bilgisini göndermektedir. Başka bir ip de sorgulatabilir.
  66. istek_icerik=str.encode(HOST)
  67. istek_dosya=raporlama_dizin+"istek"
  68. open(istek_dosya, 'wb').write(istek_icerik)
  69. # istek dosyası ftp sunucusuna yüklenir.
  70. upload(ftp,istek_dosya)
  71. while(True):
  72. ftp.dir(data.append)
  73. if getFile(ftp,'rapor'):
  74. break
  75. else:
  76. time.sleep(3)
  77. ftp.quit()
  78. else:
  79. print("aktif sunucu bulunamadı.")