123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- from ftplib import FTP
- import sys
- import os
- import time
- import subprocess
- from dacid_dht import Dht
- #dhtsunucu=None # 10.45.2.127:1923
- dhtsunucu="10.45.2.129:1923"
- raporlama_dizin="/tmp/raporlama/"
- FTP_PORT=b"5121"
- subprocess.call(['mkdir',"-p",raporlama_dizin])
- def get_interface():
- for index, item in enumerate(os.listdir("/sys/class/net")):
- if "wg" in item:
- return item
-
- f = os.popen('ifconfig '+get_interface()+' | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
- HOST=f.read().strip('\n')
- def getFile(ftp, fname):
- try:
- filename=raporlama_dizin+fname
- bfile = os.path.basename(fname)
- ftp.retrbinary("RETR " + bfile ,open(filename, 'wb').write)
- print ("Success:",filename,"got")
- return True
- except:
- print ("Error:",filename,"cant get")
- os.remove(filename)
- return False
- def upload(ftp, ifile):
- bfile = os.path.basename(ifile)
- ext = os.path.splitext(ifile)[1]
- if ext in (".txt", ".htm", ".html"):
- ftp.storlines("STOR " + bfile, open(ifile))
- else:
- ftp.storbinary("STOR " + bfile, open(ifile, "rb"), 1024)
- #dht den gelen bilgilerle host,port,servis kanalı belirlenecek
- dht=Dht(bs=dhtsunucu)
- sunucular=dht.sunucular()
- print (sunucular)
- if sunucular:
- for sunucu in sunucular:
- shost=sunucu.split(":")[0]
- sport=int(sunucu.split(":")[1])
- ftp = FTP()
- ftp.connect(shost,sport)
- ftp.login()
- id=ftp.getmultiline()
- print (ftp.getwelcome(),"sunucusuna hoşgeldiniz")
- print("istemci id:",id)
- # sunucuda tanımlı servisler çekilir
- #ftp.retrlines('LIST')
- #print ("servisler:","\n",servisler)
- service_1="ftp-tarama/"
- try:
- ftp.cwd(service_1+id)
- except Exception as e:
- print (service_1,str(e))
- # break process for this server loop
- print (service_1," işlemi gerçekleştirilemedi.")
- continue
- #getFile(ftp,'help')
- data = []
-
- ftp.dir(data.append)
- #eski istek/rapor sil
- subprocess.call(['rm',"-rf",raporlama_dizin+"istek",raporlama_dizin+"rapor"])
-
- # port tarama için client kendi host bilgisini göndermektedir. Başka bir ip de sorgulatabilir.
- istek_icerik=str.encode(HOST)+b":"+FTP_PORT
- istek_dosya=raporlama_dizin+"istek"
- open(istek_dosya, 'wb').write(istek_icerik)
-
- # istek dosyası ftp sunucusuna yüklenir.
- upload(ftp,istek_dosya)
- while(True):
- ftp.dir(data.append)
- if getFile(ftp,'rapor'):
- break
- else:
- time.sleep(3)
-
- ftp.quit()
- else:
- print("aktif sunucu bulunamadı.")
|