istemci-ftp-tarama.py 2.4 KB

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