Python Tool Yazmak

Blwe

Uzman üye
17 Şub 2021
1,585
1,645
Green/Moderasyon
iedbopc.png


Merhaba dostlar hoş geldiniz
Bu konumuzda python ile tool nasıl yazılır onu göstereceğim :)
Bilmeyen arkadaşlar için ve öğrenmek isteyenler için.

Tool yazmak için bir tane editör programı seçmenizi öneririm.
Benim önerim :

Windows: Visual Studio Code
Linux: PyCharm

Tool olarak Proxy Tool Yazıcaz


uNuZVE.png


Python Nedir?

neredeyse her amaç için kullanılabilen Python, obje yönelimli, yorumlanabilir ve dinamik bir programlama dilidir.




b9if469.png

1. Okuması, Öğrenmesi ve Yazması Kolay

Python, İngilizce benzeri sözdizimine sahip üst düzey bir programlama dilidir . Bu, kodun okunmasını ve anlaşılmasını kolaylaştırır.

Python'u almak ve öğrenmek gerçekten çok kolay , bu yüzden birçok insan Python'u yeni başlayanlara tavsiye ediyor. Aynı görevi gerçekleştirmek için C/C++ ve Java gibi diğer ana dillere kıyasla daha az kod satırına ihtiyacınız var .

2. Geliştirilmiş Verimlilik

Python çok üretken bir dildir . Python'un basitliği nedeniyle geliştiriciler sorunu çözmeye odaklanabilir. Programlama dilinin sözdizimini veya davranışını anlamak için çok fazla zaman harcamaları gerekmez . Daha az kod yazar ve daha çok iş yaparsınız.

3. Yorumlanan Dil

Python, yorumlanmış bir dildir; bu, Python'un kodu satır satır doğrudan yürüttüğü anlamına gelir . Herhangi bir hata durumunda, daha fazla çalışmayı durdurur ve oluşan hatayı geri bildirir.

Python, programın birden fazla hatası olsa bile yalnızca bir hata gösterir. Bu, hata ayıklamayı kolaylaştırır .

4. Dinamik Olarak Yazılan Bir Dil

Python, biz kodu çalıştırana kadar değişkenin türünü bilmez. Yürütme sırasında veri türünü otomatik olarak atar . Programcının değişkenleri ve veri türlerini bildirmek konusunda endişelenmesine gerek yoktur.

5. Ücretsiz ve Açık Kaynak

Python, OSI onaylı açık kaynak lisansı altında gelir . Bu yapar özgür için kullanmak ve dağıtmak . Kaynak kodunu indirebilir, değiştirebilir ve hatta Python sürümünüzü dağıtabilirsiniz. Bu, bazı belirli davranışları değiştirmek ve sürümlerini geliştirme için kullanmak isteyen kuruluşlar için kullanışlıdır.

6. Geniş Kitaplıklar Desteği

Python'un standart kütüphanesi çok büyüktür, göreviniz için gereken hemen hemen tüm fonksiyonları bulabilirsiniz. Bu nedenle, harici kütüphanelere bağımlı olmanız gerekmez.

Ancak yapsanız bile, bir Python paket yöneticisi (pip) , Python paket dizininden (PyPi) diğer harika paketleri içe aktarmayı kolaylaştırır . 200.000'den fazla paketten oluşur.

7. Taşınabilirlik

C/C++ gibi birçok dilde , programı farklı platformlarda çalıştırmak için kodunuzu değiştirmeniz gerekir . Python'da durum aynı değil. Yalnızca bir kez yazıp her yerde çalıştırırsınız.

Ancak, sisteme bağlı herhangi bir özelliği dahil etmemeye dikkat etmelisiniz .




7wghwy5.png

1. Yavaş Hız

Python'un dinamik doğası, Python'un yavaş hızından da sorumludur, çünkü kodu yürütürken fazladan iş yapması gerekir. Bu nedenle Python, hızın projenin önemli bir yönü olduğu amaçlar için kullanılmaz.

2. Bellek Verimli Değil

Geliştiriciye basitlik sağlamak için Python'un biraz ödün vermesi gerekiyor. Python programlama dili büyük miktarda bellek kullanır . Bellek optimizasyonunu tercih ettiğimizde uygulamalar oluştururken bu bir dezavantaj olabilir.

3. Mobil Bilişimde Zayıf

Python genellikle sunucu tarafı programlamada kullanılır . Aşağıdaki nedenlerden dolayı istemci tarafında veya mobil uygulamalarda Python'u göremiyoruz. Python bellek açısından verimli değildir ve diğer dillere kıyasla yavaş işlem gücüne sahiptir .

4. Veritabanı Erişimi

Python'da programlama yapmak kolay ve stressizdir . Ancak veritabanı ile etkileşime girdiğimizde, geride kalıyor.

Python'un veritabanı erişim katmanı, JDBC ve ODBC gibi popüler teknolojilere kıyasla ilkel ve az gelişmiştir .

Büyük kuruluşlar , karmaşık eski verilerin sorunsuz etkileşimine ihtiyaç duyar ve bu nedenle Python, kuruluşlarda nadiren kullanılır.

5. Çalışma Zamanı Hataları

Python'un dinamik olarak yazılan bir dil olduğunu bildiğimiz gibi, bir değişkenin veri tipi her an değişebilir. Tamsayı içeren bir değişken gelecekte bir dize tutabilir ve bu da Çalışma Zamanı Hatalarına yol açabilir .

Bu nedenle Python programcılarının uygulamaları kapsamlı bir şekilde test etmesi gerekir.


11shmd4.png



İlk önce oluşturduğumuz .py uzantılı dosyanın içerisine import etmemiz gereken 3 tane modül var
Modülleri import önce Modülleri yüklememiz gerekiyor :

sudo apt install python3-pip
4034205E48E2FF4490D14EF0E2D8B3602C91710D
pip3 install requests
pip3 install beautifulsoup4
pip3 install choice
4034205E48E2FF4490D14EF0E2D8B3602C91710D



Python:
import requests
from bs4 import BeautifulSoup
from random import choice
3x98yii.png


İmport kodlarımızı ve modüllerimizi yazdık peki bu kodlar ve modüller ne işe yarıyor?
amaçları nedir?


import
= Kendi yazdığımız bir modüle başka bir projedeihtiyaç hissettiğimizde o modülü yeni projeye aktarma işlemeine import denir.

requests = Bu modül ile web üzerindeki isteklerinizi yöneteceksiniz. Mesela bu modül ile API entpointlerine PUT, DELETE, POST gibi istekler atabilirsiniz.

From =
Bir isim alanı bir nesnedir; dolayısıyla modülde tanımlanan değişken ve fonksiyonlara erişmek için nokta notasyonu kullanılır. Modülden sadece belli isimleri almak istiyorsak from import komutunu kullanabiliriz.

BeautifulSoup = Bu modül ile bir kaynak içerisindeki HTML kodlarını ayrıştırıp sadece istediğimiz alanları kesen programlar, daha popüler adıyla BOT yazabiliriz.

bs4 = BeatufilSoup4

random = Eğer yazdığınız programlarda, belirli bir aralıkta rastgele sayıların üretilmesine ihtiyaç duyarsanız Python’ın standart kütüphanesinde bulunan random adlı bir modülü kullanabilirsiniz.

choice =
choice() random modülünün choice() adlı fonksiyonunu kullanarak, dizi niteliği taşıyan veri tiplerinden rastgele öğeler seçebiliriz.


iedbopc.png




Python:
import requests
from bs4 import BeautifulSoup
from random import choice



def proxydeneme():
proxyurl = 'https://free-proxy-list.net/'
Req = requests.get(proxyurl)
Beasoup = BeautifulSoup(Req.content, 'html5lib')
return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x:
x.text, Beasoup.find_all('td')[::8])),
(map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))}



print (proxydeneme())
7763rud.png


Toolumuzun gövdesini oluşturduk :)
Peki bu gövdeyi oluşturuyorken neler yaptık?
Kodlarımız nasıl işliyor?

Def proxydeneme () = def komutu atama ( = ) işlemi gibi çalışır bunun bir yan faydası, varolan bir fonksiyona başka isimler verebilme imkanıdır. İki ismin de aynı nesneye işaret ettiğini is komutuyla doğrulayabiliriz. Yine aynı dinamik özellik sayesinde, fonksiyon veren fonksiyonlar (“fonksiyon fabrikaları”) tanımlanabilir. Ve biz burada proxydeneme fonksiyonu oluşturmuş bulunmaktayız :)

proxyurl = 'Free Proxy List - Just Checked Proxy List' = Burada bir url ataması yaptık gerekli olan fonksiyonları bir url'nin içinden alıcaz yani
(fonksiyon fabrikaları) işlevini kullandık :)


Req = requests.get(proxyurl) =
belirtilen url'ye bir GET isteği gönderdik.

Beasoup = BeautifulSoup(Req.content, 'html5lib') = Requests modülü ile siteye bir GET isteği yaptık bunu bir Req objesine atadık, sonra da BeautifulSoup içine Req.content değerini verdik, html5lib kütüphanesi ile parse etmesini seçtim, çünkü hızlı.

Kullanabileceğiniz kütüphaneler şunlar:
  • lxml
  • html.parser
  • lxml-xml
  • html5lib

return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x: x.text, Beasoup.find_all('td')[::8])), (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))} = return komutu ile çağırdığımız fonksiyonun değerini buraya getirmesini sağladık ve o değerin ismini IP addres ve PORT olarak atadık sonrasında choice ile rastgele bir ip addres ve ona bağlı olan bir portu döndürmesini sağladık ve döndürme işlemini listeleyerek vermesini istedik map ile parametre olarak aldığı listenin her elemanını sırasıyla parametre olarak göndermesini sağladık lambda tek satırlık fonksiyon olduğu için lambdayı kullandık ve tek bir satıra Ip addresimizi ve portumuzu koydurduk. x[0] olarak ip adresimizi adlandırdık ve x[1] olarakta portumuzu adlandırdık, (Yazılımda 0'dan başlanır sayısal olarak) ve sonrasında bir listeleme ve zip ile iki dizisel elemanın öğelerini birbirleriyle eşleştirirerek bir zip objesi oluşturduk sonrasında o zipi listeledik ve map ile parametreleri sırasıyla uyguladık sonrasında lambda ile o parametreler'den rastgele bir tanesini alıp bize çıktı vermesini sağladık, text olarak. Beasoup.find_all fonksiyonu ile html içerisinde ki bilgileri bize vermesini sağlıcaz Ip addres'ler ve portlar 'td' içerisindeydi o yüzden ('td') olarak işaretledik ve [1::8] komutu ile 1'den başlayıp sekizer sekizer almasını sağladık bu komut ile.

Toolumuz daha bitmedi ama hadi bakalım nasıl çalışıyor?


lder7qt.jpg



Evet tamda istediğimiz gibi herhangi bir Ip addresi ve ona bağlı olan portu bize verdi :)
şimdi ileriki safhalara geçelim..


Python:
import requests
from bs4 import BeautifulSoup
from random import choice

def proxydeneme():
    proxyurl = 'https://free-proxy-list.net/'
    Req = requests.get(proxyurl)
    Beasoup = BeautifulSoup(Req.content, 'html5lib')
    return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x:
            x.text, Beasoup.find_all('td')[::8])),
                                (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))}

def proxykullan(proxyurl):
    while True:
        try:
            proxy = proxydeneme()
            r = requests.get(url,proxies=proxy,timeout=5)
            if r.status_code == 200:
                print('Proxy Çalışıyor = ', proxy)
                break
        except:
            print('Proxy çalıştırılamadı:', proxy)
            pass
    return r
url = 'https://www.ipify.org/'
x = proxykullan(url)
print(x.text)
Bu kısımda toolumuzu bitiriyoruz ve nasıl çalışacağını test edicez
Yine kodlarımızın işlevini aneliz edelim..
def komutu ile yeni bir proxykullan fonksiyonu oluşturduk
ve o fonksiyonu proxyurl atamasına bağdaştırdık yani 'Free Proxy List - Just Checked Proxy List' adresine bağladık
while true ile bir döngü oluşturduk içinde'ki işlemleri sonsuza kadar döndüren bir döngü
try komutu ile aşağısına girdiğimiz kodlara hata denetlemesi yapıcaz
proxy = proxydeneme() bir atama sağladık burada
r = requests.get(url,proxies=proxy,timeout=5) ile proxy adresimiz eğer 5 saniyeden geç gelirse iptal edilip diğer ip addrese geçmesini istedik
r = r.status_code == 200: ile Bu bir HTTP durum kodudur, "Tamam" anlamına gelir (Örn: Sunucu http isteğini başarıyla yanıtladı) demek
print('Proxy çalışıyor =', proxy) ile proxy'miz 5 saniyeden geç geldiğinde o proxy'i bize sağlamasını istedik :)
break döngünün hemen o anda bitirilmesini istedik. Program akışı döngüden sonra her ne varsa onunla devam edicez çünkü
except ile try komutunda olduğu gibi kodlara hata denetlemesi yapıcaz
print('proxy çalıştırılamadı:', proxy) bize 5 saniye geç bağlanan proxy'leri iptal ettiricek ve diğer proxylere geçicek
pass komutu bize diğer proxyleri denememiz için yardım eden komut
return r bir fonksiyonun sonlandırılmasına ve fonksiyonun çağrıldığı yere değer götürmesine yardım edicek
url = 'ipify - A Simple Public IP Address API' ataması ile ipify adresine atadık
x = proxykullan (url) ile x atamasına proxykullan fonksiyonunu ve önceden atama yaptığımız url atamasını bağdaştırdık.
print(x.text) ise bize çıktı bilgilerini text olarak bize göndermesini sağlıyor.


Kodlarımız bu kadardı hadi şimdi nasıl çalıştığına bakalım :)

d8hyj8q.png



Toolumuz çalıştı ancak html kodlarını'da beraberiyle getirdi mantıkken öyle olması gerekiyordu zaten.
Umarım bir şeyler anlatabilmişimdir : ))


Bu konumuz bu kadardı

Kendinize dikkat edin
İyi günler.



GREEN-TEAMe8e14a8cdf75a69a.png
 

Helmsys

Ar-Ge Ekibi Kıdemli
16 Mar 2022
1,492
1,652
Tertemiz olmuş.
map,zip ve lambda terimlerini olması gerektiği gibi açıklamışsınız. Fakat şöyle uzaktan koda baktığımda, yazmak isteyen herhangi bir kişi iç içe olan ve tek satırda yazılan o lambda fonksiyonunda syntax hatası yapması içten bile değil.
Bence anlatım ve eğitim dışında tek satır kod yazılması çok daha verimli. Zira siz ne kadar açıklarsanız açıklayın, o tek satırda yazılan kod o kişinin kafasında hep soru işareti olarak kalacak. Ta ki kendi çözene kadar.
.
.
Elinize sağlık.
.
.
Bence diğer bir konunuzda URL kısaltıp link veren bir python programını yapabilirsiniz. Çok verimli yerlerde kullanılabilir.
 

Blwe

Uzman üye
17 Şub 2021
1,585
1,645
Green/Moderasyon
Ellerine sağlık.
Teşekkürler connec hocam : )
Tertemiz olmuş.
map,zip ve lambda terimlerini olması gerektiği gibi açıklamışsınız. Fakat şöyle uzaktan koda baktığımda, yazmak isteyen herhangi bir kişi iç içe olan ve tek satırda yazılan o lambda fonksiyonunda syntax hatası yapması içten bile değil.
Bence anlatım ve eğitim dışında tek satır kod yazılması çok daha verimli. Zira siz ne kadar açıklarsanız açıklayın, o tek satırda yazılan kod o kişinin kafasında hep soru işareti olarak kalacak. Ta ki kendi çözene kadar.
.
.
Elinize sağlık.
.
.
Bence diğer bir konunuzda URL kısaltıp link veren bir python programını yapabilirsiniz. Çok verimli yerlerde kullanılabilir.
Green tim mensupları olarak böyle ayrıntılı bilgileri anlatmak gereğimizdir : ) teşekkürler.
Tek satır olarak yazmaya özen göstereceğim dediğiniz gibi öyle daha iyi anlaşılabilir : )
Konu öneriniz içinde teşekkürler güzel insan : )
 

Muslukcu

Katılımcı Üye
17 Kas 2021
699
262
Tesisat dükkanı
iedbopc.png


Merhaba dostlar hoş geldiniz
Bu konumuzda python ile tool nasıl yazılır onu göstereceğim :)
Bilmeyen arkadaşlar için ve öğrenmek isteyenler için.

Tool yazmak için bir tane editör programı seçmenizi öneririm.
Benim önerim :

Windows: Visual Studio Code
Linux: PyCharm

Tool olarak Proxy Tool Yazıcaz


uNuZVE.png


Python Nedir?

neredeyse her amaç için kullanılabilen Python, obje yönelimli, yorumlanabilir ve dinamik bir programlama dilidir.




b9if469.png

1. Okuması, Öğrenmesi ve Yazması Kolay

Python, İngilizce benzeri sözdizimine sahip üst düzey bir programlama dilidir . Bu, kodun okunmasını ve anlaşılmasını kolaylaştırır.

Python'u almak ve öğrenmek gerçekten çok kolay , bu yüzden birçok insan Python'u yeni başlayanlara tavsiye ediyor. Aynı görevi gerçekleştirmek için C/C++ ve Java gibi diğer ana dillere kıyasla daha az kod satırına ihtiyacınız var .

2. Geliştirilmiş Verimlilik

Python çok üretken bir dildir . Python'un basitliği nedeniyle geliştiriciler sorunu çözmeye odaklanabilir. Programlama dilinin sözdizimini veya davranışını anlamak için çok fazla zaman harcamaları gerekmez . Daha az kod yazar ve daha çok iş yaparsınız.

3. Yorumlanan Dil

Python, yorumlanmış bir dildir; bu, Python'un kodu satır satır doğrudan yürüttüğü anlamına gelir . Herhangi bir hata durumunda, daha fazla çalışmayı durdurur ve oluşan hatayı geri bildirir.

Python, programın birden fazla hatası olsa bile yalnızca bir hata gösterir. Bu, hata ayıklamayı kolaylaştırır .

4. Dinamik Olarak Yazılan Bir Dil

Python, biz kodu çalıştırana kadar değişkenin türünü bilmez. Yürütme sırasında veri türünü otomatik olarak atar . Programcının değişkenleri ve veri türlerini bildirmek konusunda endişelenmesine gerek yoktur.

5. Ücretsiz ve Açık Kaynak

Python, OSI onaylı açık kaynak lisansı altında gelir . Bu yapar özgür için kullanmak ve dağıtmak . Kaynak kodunu indirebilir, değiştirebilir ve hatta Python sürümünüzü dağıtabilirsiniz. Bu, bazı belirli davranışları değiştirmek ve sürümlerini geliştirme için kullanmak isteyen kuruluşlar için kullanışlıdır.

6. Geniş Kitaplıklar Desteği

Python'un standart kütüphanesi çok büyüktür, göreviniz için gereken hemen hemen tüm fonksiyonları bulabilirsiniz. Bu nedenle, harici kütüphanelere bağımlı olmanız gerekmez.

Ancak yapsanız bile, bir Python paket yöneticisi (pip) , Python paket dizininden (PyPi) diğer harika paketleri içe aktarmayı kolaylaştırır . 200.000'den fazla paketten oluşur.

7. Taşınabilirlik

C/C++ gibi birçok dilde , programı farklı platformlarda çalıştırmak için kodunuzu değiştirmeniz gerekir . Python'da durum aynı değil. Yalnızca bir kez yazıp her yerde çalıştırırsınız.

Ancak, sisteme bağlı herhangi bir özelliği dahil etmemeye dikkat etmelisiniz .




7wghwy5.png

1. Yavaş Hız

Python'un dinamik doğası, Python'un yavaş hızından da sorumludur, çünkü kodu yürütürken fazladan iş yapması gerekir. Bu nedenle Python, hızın projenin önemli bir yönü olduğu amaçlar için kullanılmaz.

2. Bellek Verimli Değil

Geliştiriciye basitlik sağlamak için Python'un biraz ödün vermesi gerekiyor. Python programlama dili büyük miktarda bellek kullanır . Bellek optimizasyonunu tercih ettiğimizde uygulamalar oluştururken bu bir dezavantaj olabilir.

3. Mobil Bilişimde Zayıf

Python genellikle sunucu tarafı programlamada kullanılır . Aşağıdaki nedenlerden dolayı istemci tarafında veya mobil uygulamalarda Python'u göremiyoruz. Python bellek açısından verimli değildir ve diğer dillere kıyasla yavaş işlem gücüne sahiptir .

4. Veritabanı Erişimi

Python'da programlama yapmak kolay ve stressizdir . Ancak veritabanı ile etkileşime girdiğimizde, geride kalıyor.

Python'un veritabanı erişim katmanı, JDBC ve ODBC gibi popüler teknolojilere kıyasla ilkel ve az gelişmiştir .

Büyük kuruluşlar , karmaşık eski verilerin sorunsuz etkileşimine ihtiyaç duyar ve bu nedenle Python, kuruluşlarda nadiren kullanılır.

5. Çalışma Zamanı Hataları

Python'un dinamik olarak yazılan bir dil olduğunu bildiğimiz gibi, bir değişkenin veri tipi her an değişebilir. Tamsayı içeren bir değişken gelecekte bir dize tutabilir ve bu da Çalışma Zamanı Hatalarına yol açabilir .

Bu nedenle Python programcılarının uygulamaları kapsamlı bir şekilde test etmesi gerekir.


11shmd4.png



İlk önce oluşturduğumuz .py uzantılı dosyanın içerisine import etmemiz gereken 3 tane modül var
Modülleri import önce Modülleri yüklememiz gerekiyor :

sudo apt install python3-pip
4034205E48E2FF4490D14EF0E2D8B3602C91710D
pip3 install requests
pip3 install beautifulsoup4
pip3 install choice
4034205E48E2FF4490D14EF0E2D8B3602C91710D



Python:
import requests
from bs4 import BeautifulSoup
from random import choice
3x98yii.png


İmport kodlarımızı ve modüllerimizi yazdık peki bu kodlar ve modüller ne işe yarıyor?
amaçları nedir?


import
= Kendi yazdığımız bir modüle başka bir projedeihtiyaç hissettiğimizde o modülü yeni projeye aktarma işlemeine import denir.

requests = Bu modül ile web üzerindeki isteklerinizi yöneteceksiniz. Mesela bu modül ile API entpointlerine PUT, DELETE, POST gibi istekler atabilirsiniz.

From =
Bir isim alanı bir nesnedir; dolayısıyla modülde tanımlanan değişken ve fonksiyonlara erişmek için nokta notasyonu kullanılır. Modülden sadece belli isimleri almak istiyorsak from import komutunu kullanabiliriz.

BeautifulSoup = Bu modül ile bir kaynak içerisindeki HTML kodlarını ayrıştırıp sadece istediğimiz alanları kesen programlar, daha popüler adıyla BOT yazabiliriz.

bs4 = BeatufilSoup4

random = Eğer yazdığınız programlarda, belirli bir aralıkta rastgele sayıların üretilmesine ihtiyaç duyarsanız Python’ın standart kütüphanesinde bulunan random adlı bir modülü kullanabilirsiniz.

choice =
choice() random modülünün choice() adlı fonksiyonunu kullanarak, dizi niteliği taşıyan veri tiplerinden rastgele öğeler seçebiliriz.


iedbopc.png




Python:
import requests
from bs4 import BeautifulSoup
from random import choice



def proxydeneme():
proxyurl = 'https://free-proxy-list.net/'
Req = requests.get(proxyurl)
Beasoup = BeautifulSoup(Req.content, 'html5lib')
return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x:
x.text, Beasoup.find_all('td')[::8])),
(map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))}



print (proxydeneme())
7763rud.png


Toolumuzun gövdesini oluşturduk :)
Peki bu gövdeyi oluşturuyorken neler yaptık?
Kodlarımız nasıl işliyor?

Def proxydeneme () = def komutu atama ( = ) işlemi gibi çalışır bunun bir yan faydası, varolan bir fonksiyona başka isimler verebilme imkanıdır. İki ismin de aynı nesneye işaret ettiğini is komutuyla doğrulayabiliriz. Yine aynı dinamik özellik sayesinde, fonksiyon veren fonksiyonlar (“fonksiyon fabrikaları”) tanımlanabilir. Ve biz burada proxydeneme fonksiyonu oluşturmuş bulunmaktayız :)

proxyurl = 'Free Proxy List - Just Checked Proxy List' = Burada bir url ataması yaptık gerekli olan fonksiyonları bir url'nin içinden alıcaz yani
(fonksiyon fabrikaları) işlevini kullandık :)


Req = requests.get(proxyurl) =
belirtilen url'ye bir GET isteği gönderdik.

Beasoup = BeautifulSoup(Req.content, 'html5lib') = Requests modülü ile siteye bir GET isteği yaptık bunu bir Req objesine atadık, sonra da BeautifulSoup içine Req.content değerini verdik, html5lib kütüphanesi ile parse etmesini seçtim, çünkü hızlı.

Kullanabileceğiniz kütüphaneler şunlar:
  • lxml
  • html.parser
  • lxml-xml
  • html5lib

return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x: x.text, Beasoup.find_all('td')[::8])), (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))} = return komutu ile çağırdığımız fonksiyonun değerini buraya getirmesini sağladık ve o değerin ismini IP addres ve PORT olarak atadık sonrasında choice ile rastgele bir ip addres ve ona bağlı olan bir portu döndürmesini sağladık ve döndürme işlemini listeleyerek vermesini istedik map ile parametre olarak aldığı listenin her elemanını sırasıyla parametre olarak göndermesini sağladık lambda tek satırlık fonksiyon olduğu için lambdayı kullandık ve tek bir satıra Ip addresimizi ve portumuzu koydurduk. x[0] olarak ip adresimizi adlandırdık ve x[1] olarakta portumuzu adlandırdık, (Yazılımda 0'dan başlanır sayısal olarak) ve sonrasında bir listeleme ve zip ile iki dizisel elemanın öğelerini birbirleriyle eşleştirirerek bir zip objesi oluşturduk sonrasında o zipi listeledik ve map ile parametreleri sırasıyla uyguladık sonrasında lambda ile o parametreler'den rastgele bir tanesini alıp bize çıktı vermesini sağladık, text olarak. Beasoup.find_all fonksiyonu ile html içerisinde ki bilgileri bize vermesini sağlıcaz Ip addres'ler ve portlar 'td' içerisindeydi o yüzden ('td') olarak işaretledik ve [1::8] komutu ile 1'den başlayıp sekizer sekizer almasını sağladık bu komut ile.

Toolumuz daha bitmedi ama hadi bakalım nasıl çalışıyor?


lder7qt.jpg



Evet tamda istediğimiz gibi herhangi bir Ip addresi ve ona bağlı olan portu bize verdi :)
şimdi ileriki safhalara geçelim..


Python:
import requests
from bs4 import BeautifulSoup
from random import choice

def proxydeneme():
    proxyurl = 'https://free-proxy-list.net/'
    Req = requests.get(proxyurl)
    Beasoup = BeautifulSoup(Req.content, 'html5lib')
    return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x:
            x.text, Beasoup.find_all('td')[::8])),
                                (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))}

def proxykullan(proxyurl):
    while True:
        try:
            proxy = proxydeneme()
            r = requests.get(url,proxies=proxy,timeout=5)
            if r.status_code == 200:
                print('Proxy Çalışıyor = ', proxy)
                break
        except:
            print('Proxy çalıştırılamadı:', proxy)
            pass
    return r
url = 'https://www.ipify.org/'
x = proxykullan(url)
print(x.text)
Bu kısımda toolumuzu bitiriyoruz ve nasıl çalışacağını test edicez
Yine kodlarımızın işlevini aneliz edelim..
def komutu ile yeni bir proxykullan fonksiyonu oluşturduk
ve o fonksiyonu proxyurl atamasına bağdaştırdık yani 'Free Proxy List - Just Checked Proxy List' adresine bağladık
while true ile bir döngü oluşturduk içinde'ki işlemleri sonsuza kadar döndüren bir döngü
try komutu ile aşağısına girdiğimiz kodlara hata denetlemesi yapıcaz
proxy = proxydeneme() bir atama sağladık burada
r = requests.get(url,proxies=proxy,timeout=5) ile proxy adresimiz eğer 5 saniyeden geç gelirse iptal edilip diğer ip addrese geçmesini istedik
r = r.status_code == 200: ile Bu bir HTTP durum kodudur, "Tamam" anlamına gelir (Örn: Sunucu http isteğini başarıyla yanıtladı) demek
print('Proxy çalışıyor =', proxy) ile proxy'miz 5 saniyeden geç geldiğinde o proxy'i bize sağlamasını istedik :)
break döngünün hemen o anda bitirilmesini istedik. Program akışı döngüden sonra her ne varsa onunla devam edicez çünkü
except ile try komutunda olduğu gibi kodlara hata denetlemesi yapıcaz
print('proxy çalıştırılamadı:', proxy) bize 5 saniye geç bağlanan proxy'leri iptal ettiricek ve diğer proxylere geçicek
pass komutu bize diğer proxyleri denememiz için yardım eden komut
return r bir fonksiyonun sonlandırılmasına ve fonksiyonun çağrıldığı yere değer götürmesine yardım edicek
url = 'ipify - A Simple Public IP Address API' ataması ile ipify adresine atadık
x = proxykullan (url) ile x atamasına proxykullan fonksiyonunu ve önceden atama yaptığımız url atamasını bağdaştırdık.
print(x.text) ise bize çıktı bilgilerini text olarak bize göndermesini sağlıyor.


Kodlarımız bu kadardı hadi şimdi nasıl çalıştığına bakalım :)

d8hyj8q.png



Toolumuz çalıştı ancak html kodlarını'da beraberiyle getirdi mantıkken öyle olması gerekiyordu zaten.
Umarım bir şeyler anlatabilmişimdir : ))


Bu konumuz bu kadardı

Kendinize dikkat edin
İyi günler.



GREEN-TEAMe8e14a8cdf75a69a.png
Cok guzel betimli ve nitelikli betimliyici bir açıklayıcı ve ögretici olmuş bunların devamını paylaşmanız dileği ile başarınızı kutlarım
 

Blwe

Uzman üye
17 Şub 2021
1,585
1,645
Green/Moderasyon
Eline Emeğine Sağlık
Teşekkürler dostum : )

Cok guzel betimli ve nitelikli betimliyici bir açıklayıcı ve ögretici olmuş bunların devamını paylaşmanız dileği ile başarınızı kutlarım
Teşekkürler sağ olun : )

Eline sağlık canım. Güzel konu olmuş.
Teşekkürler şafak hocam : )

Eline koluna sağlık
Teşekkürler sağ olun
 

Ghost Killer

Harici Saldırı Timleri Koordinatörü
13 Ocak 2019
11,238
7,701
Eline sağlık. Python tool yazmak 2, 3, 4 halinde seri şeklinde anlatılırsa daha iyi olacaktır. Her yeni seride daha ileri seviye anlatılır vb.
 

Roween.py

Yeni üye
6 Tem 2022
12
7
Costa Rica / San Jose
iedbopc.png


Merhaba dostlar hoş geldiniz
Bu konumuzda python ile tool nasıl yazılır onu göstereceğim :)
Bilmeyen arkadaşlar için ve öğrenmek isteyenler için.

Tool yazmak için bir tane editör programı seçmenizi öneririm.
Benim önerim :

Windows: Visual Studio Code
Linux: PyCharm

Tool olarak Proxy Tool Yazıcaz


uNuZVE.png


Python Nedir?

neredeyse her amaç için kullanılabilen Python, obje yönelimli, yorumlanabilir ve dinamik bir programlama dilidir.




b9if469.png

1. Okuması, Öğrenmesi ve Yazması Kolay

Python, İngilizce benzeri sözdizimine sahip üst düzey bir programlama dilidir . Bu, kodun okunmasını ve anlaşılmasını kolaylaştırır.

Python'u almak ve öğrenmek gerçekten çok kolay , bu yüzden birçok insan Python'u yeni başlayanlara tavsiye ediyor. Aynı görevi gerçekleştirmek için C/C++ ve Java gibi diğer ana dillere kıyasla daha az kod satırına ihtiyacınız var .

2. Geliştirilmiş Verimlilik

Python çok üretken bir dildir . Python'un basitliği nedeniyle geliştiriciler sorunu çözmeye odaklanabilir. Programlama dilinin sözdizimini veya davranışını anlamak için çok fazla zaman harcamaları gerekmez . Daha az kod yazar ve daha çok iş yaparsınız.

3. Yorumlanan Dil

Python, yorumlanmış bir dildir; bu, Python'un kodu satır satır doğrudan yürüttüğü anlamına gelir . Herhangi bir hata durumunda, daha fazla çalışmayı durdurur ve oluşan hatayı geri bildirir.

Python, programın birden fazla hatası olsa bile yalnızca bir hata gösterir. Bu, hata ayıklamayı kolaylaştırır .

4. Dinamik Olarak Yazılan Bir Dil

Python, biz kodu çalıştırana kadar değişkenin türünü bilmez. Yürütme sırasında veri türünü otomatik olarak atar . Programcının değişkenleri ve veri türlerini bildirmek konusunda endişelenmesine gerek yoktur.

5. Ücretsiz ve Açık Kaynak

Python, OSI onaylı açık kaynak lisansı altında gelir . Bu yapar özgür için kullanmak ve dağıtmak . Kaynak kodunu indirebilir, değiştirebilir ve hatta Python sürümünüzü dağıtabilirsiniz. Bu, bazı belirli davranışları değiştirmek ve sürümlerini geliştirme için kullanmak isteyen kuruluşlar için kullanışlıdır.

6. Geniş Kitaplıklar Desteği

Python'un standart kütüphanesi çok büyüktür, göreviniz için gereken hemen hemen tüm fonksiyonları bulabilirsiniz. Bu nedenle, harici kütüphanelere bağımlı olmanız gerekmez.

Ancak yapsanız bile, bir Python paket yöneticisi (pip) , Python paket dizininden (PyPi) diğer harika paketleri içe aktarmayı kolaylaştırır . 200.000'den fazla paketten oluşur.

7. Taşınabilirlik

C/C++ gibi birçok dilde , programı farklı platformlarda çalıştırmak için kodunuzu değiştirmeniz gerekir . Python'da durum aynı değil. Yalnızca bir kez yazıp her yerde çalıştırırsınız.

Ancak, sisteme bağlı herhangi bir özelliği dahil etmemeye dikkat etmelisiniz .




7wghwy5.png

1. Yavaş Hız

Python'un dinamik doğası, Python'un yavaş hızından da sorumludur, çünkü kodu yürütürken fazladan iş yapması gerekir. Bu nedenle Python, hızın projenin önemli bir yönü olduğu amaçlar için kullanılmaz.

2. Bellek Verimli Değil

Geliştiriciye basitlik sağlamak için Python'un biraz ödün vermesi gerekiyor. Python programlama dili büyük miktarda bellek kullanır . Bellek optimizasyonunu tercih ettiğimizde uygulamalar oluştururken bu bir dezavantaj olabilir.

3. Mobil Bilişimde Zayıf

Python genellikle sunucu tarafı programlamada kullanılır . Aşağıdaki nedenlerden dolayı istemci tarafında veya mobil uygulamalarda Python'u göremiyoruz. Python bellek açısından verimli değildir ve diğer dillere kıyasla yavaş işlem gücüne sahiptir .

4. Veritabanı Erişimi

Python'da programlama yapmak kolay ve stressizdir . Ancak veritabanı ile etkileşime girdiğimizde, geride kalıyor.

Python'un veritabanı erişim katmanı, JDBC ve ODBC gibi popüler teknolojilere kıyasla ilkel ve az gelişmiştir .

Büyük kuruluşlar , karmaşık eski verilerin sorunsuz etkileşimine ihtiyaç duyar ve bu nedenle Python, kuruluşlarda nadiren kullanılır.

5. Çalışma Zamanı Hataları

Python'un dinamik olarak yazılan bir dil olduğunu bildiğimiz gibi, bir değişkenin veri tipi her an değişebilir. Tamsayı içeren bir değişken gelecekte bir dize tutabilir ve bu da Çalışma Zamanı Hatalarına yol açabilir .

Bu nedenle Python programcılarının uygulamaları kapsamlı bir şekilde test etmesi gerekir.


11shmd4.png



İlk önce oluşturduğumuz .py uzantılı dosyanın içerisine import etmemiz gereken 3 tane modül var
Modülleri import önce Modülleri yüklememiz gerekiyor :

sudo apt install python3-pip
4034205E48E2FF4490D14EF0E2D8B3602C91710D
pip3 install requests
pip3 install beautifulsoup4
pip3 install choice
4034205E48E2FF4490D14EF0E2D8B3602C91710D



Python:
import requests
from bs4 import BeautifulSoup
from random import choice
3x98yii.png


İmport kodlarımızı ve modüllerimizi yazdık peki bu kodlar ve modüller ne işe yarıyor?
amaçları nedir?


import
= Kendi yazdığımız bir modüle başka bir projedeihtiyaç hissettiğimizde o modülü yeni projeye aktarma işlemeine import denir.

requests = Bu modül ile web üzerindeki isteklerinizi yöneteceksiniz. Mesela bu modül ile API entpointlerine PUT, DELETE, POST gibi istekler atabilirsiniz.

From =
Bir isim alanı bir nesnedir; dolayısıyla modülde tanımlanan değişken ve fonksiyonlara erişmek için nokta notasyonu kullanılır. Modülden sadece belli isimleri almak istiyorsak from import komutunu kullanabiliriz.

BeautifulSoup = Bu modül ile bir kaynak içerisindeki HTML kodlarını ayrıştırıp sadece istediğimiz alanları kesen programlar, daha popüler adıyla BOT yazabiliriz.

bs4 = BeatufilSoup4

random = Eğer yazdığınız programlarda, belirli bir aralıkta rastgele sayıların üretilmesine ihtiyaç duyarsanız Python’ın standart kütüphanesinde bulunan random adlı bir modülü kullanabilirsiniz.

choice =
choice() random modülünün choice() adlı fonksiyonunu kullanarak, dizi niteliği taşıyan veri tiplerinden rastgele öğeler seçebiliriz.


iedbopc.png




Python:
import requests
from bs4 import BeautifulSoup
from random import choice



def proxydeneme():
proxyurl = 'https://free-proxy-list.net/'
Req = requests.get(proxyurl)
Beasoup = BeautifulSoup(Req.content, 'html5lib')
return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x:
x.text, Beasoup.find_all('td')[::8])),
(map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))}



print (proxydeneme())
7763rud.png


Toolumuzun gövdesini oluşturduk :)
Peki bu gövdeyi oluşturuyorken neler yaptık?
Kodlarımız nasıl işliyor?

Def proxydeneme () = def komutu atama ( = ) işlemi gibi çalışır bunun bir yan faydası, varolan bir fonksiyona başka isimler verebilme imkanıdır. İki ismin de aynı nesneye işaret ettiğini is komutuyla doğrulayabiliriz. Yine aynı dinamik özellik sayesinde, fonksiyon veren fonksiyonlar (“fonksiyon fabrikaları”) tanımlanabilir. Ve biz burada proxydeneme fonksiyonu oluşturmuş bulunmaktayız :)

proxyurl = 'Free Proxy List - Just Checked Proxy List' = Burada bir url ataması yaptık gerekli olan fonksiyonları bir url'nin içinden alıcaz yani
(fonksiyon fabrikaları) işlevini kullandık :)


Req = requests.get(proxyurl) =
belirtilen url'ye bir GET isteği gönderdik.

Beasoup = BeautifulSoup(Req.content, 'html5lib') = Requests modülü ile siteye bir GET isteği yaptık bunu bir Req objesine atadık, sonra da BeautifulSoup içine Req.content değerini verdik, html5lib kütüphanesi ile parse etmesini seçtim, çünkü hızlı.

Kullanabileceğiniz kütüphaneler şunlar:
  • lxml
  • html.parser
  • lxml-xml
  • html5lib

return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x: x.text, Beasoup.find_all('td')[::8])), (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))} = return komutu ile çağırdığımız fonksiyonun değerini buraya getirmesini sağladık ve o değerin ismini IP addres ve PORT olarak atadık sonrasında choice ile rastgele bir ip addres ve ona bağlı olan bir portu döndürmesini sağladık ve döndürme işlemini listeleyerek vermesini istedik map ile parametre olarak aldığı listenin her elemanını sırasıyla parametre olarak göndermesini sağladık lambda tek satırlık fonksiyon olduğu için lambdayı kullandık ve tek bir satıra Ip addresimizi ve portumuzu koydurduk. x[0] olarak ip adresimizi adlandırdık ve x[1] olarakta portumuzu adlandırdık, (Yazılımda 0'dan başlanır sayısal olarak) ve sonrasında bir listeleme ve zip ile iki dizisel elemanın öğelerini birbirleriyle eşleştirirerek bir zip objesi oluşturduk sonrasında o zipi listeledik ve map ile parametreleri sırasıyla uyguladık sonrasında lambda ile o parametreler'den rastgele bir tanesini alıp bize çıktı vermesini sağladık, text olarak. Beasoup.find_all fonksiyonu ile html içerisinde ki bilgileri bize vermesini sağlıcaz Ip addres'ler ve portlar 'td' içerisindeydi o yüzden ('td') olarak işaretledik ve [1::8] komutu ile 1'den başlayıp sekizer sekizer almasını sağladık bu komut ile.

Toolumuz daha bitmedi ama hadi bakalım nasıl çalışıyor?


lder7qt.jpg



Evet tamda istediğimiz gibi herhangi bir Ip addresi ve ona bağlı olan portu bize verdi :)
şimdi ileriki safhalara geçelim..


Python:
import requests
from bs4 import BeautifulSoup
from random import choice

def proxydeneme():
    proxyurl = 'https://free-proxy-list.net/'
    Req = requests.get(proxyurl)
    Beasoup = BeautifulSoup(Req.content, 'html5lib')
    return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x:
            x.text, Beasoup.find_all('td')[::8])),
                                (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))}

def proxykullan(proxyurl):
    while True:
        try:
            proxy = proxydeneme()
            r = requests.get(url,proxies=proxy,timeout=5)
            if r.status_code == 200:
                print('Proxy Çalışıyor = ', proxy)
                break
        except:
            print('Proxy çalıştırılamadı:', proxy)
            pass
    return r
url = 'https://www.ipify.org/'
x = proxykullan(url)
print(x.text)
Bu kısımda toolumuzu bitiriyoruz ve nasıl çalışacağını test edicez
Yine kodlarımızın işlevini aneliz edelim..
def komutu ile yeni bir proxykullan fonksiyonu oluşturduk
ve o fonksiyonu proxyurl atamasına bağdaştırdık yani 'Free Proxy List - Just Checked Proxy List' adresine bağladık
while true ile bir döngü oluşturduk içinde'ki işlemleri sonsuza kadar döndüren bir döngü
try komutu ile aşağısına girdiğimiz kodlara hata denetlemesi yapıcaz
proxy = proxydeneme() bir atama sağladık burada
r = requests.get(url,proxies=proxy,timeout=5) ile proxy adresimiz eğer 5 saniyeden geç gelirse iptal edilip diğer ip addrese geçmesini istedik
r = r.status_code == 200: ile Bu bir HTTP durum kodudur, "Tamam" anlamına gelir (Örn: Sunucu http isteğini başarıyla yanıtladı) demek
print('Proxy çalışıyor =', proxy) ile proxy'miz 5 saniyeden geç geldiğinde o proxy'i bize sağlamasını istedik :)
break döngünün hemen o anda bitirilmesini istedik. Program akışı döngüden sonra her ne varsa onunla devam edicez çünkü
except ile try komutunda olduğu gibi kodlara hata denetlemesi yapıcaz
print('proxy çalıştırılamadı:', proxy) bize 5 saniye geç bağlanan proxy'leri iptal ettiricek ve diğer proxylere geçicek
pass komutu bize diğer proxyleri denememiz için yardım eden komut
return r bir fonksiyonun sonlandırılmasına ve fonksiyonun çağrıldığı yere değer götürmesine yardım edicek
url = 'ipify - A Simple Public IP Address API' ataması ile ipify adresine atadık
x = proxykullan (url) ile x atamasına proxykullan fonksiyonunu ve önceden atama yaptığımız url atamasını bağdaştırdık.
print(x.text) ise bize çıktı bilgilerini text olarak bize göndermesini sağlıyor.


Kodlarımız bu kadardı hadi şimdi nasıl çalıştığına bakalım :)

d8hyj8q.png



Toolumuz çalıştı ancak html kodlarını'da beraberiyle getirdi mantıkken öyle olması gerekiyordu zaten.
Umarım bir şeyler anlatabilmişimdir : ))


Bu konumuz bu kadardı

Kendinize dikkat edin
İyi günler.



GREEN-TEAMe8e14a8cdf75a69a.png
Harika konu emeğine sağlık.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.