Bot yazacaklar için yol haritası [Anlatım]

19 May 2020
238
84
1. bölüm (şuan buradasınız)
2. bölüm
3. bölüm

Merhaba,

hayatımız "copy, paste" olmuş, al oradan yapıştır buraya, konu yazmış ol, İçerikle alakalı fikrin olmasın. Öğrenmek isteyen arkadaşlar için, önemsiz gibi duran ama ufak detaylar sayesinde daha iyi algılamanızı sağlayacak bir konuyu, bilen biri hazırlasın düşüncesiyle hazırlamak istedim. Konu sonunda da yaptığınız çalışmayla ilgili yardıma ihtiyacınız olur, hata alırsınız, işin içinden çıkamazsınız, gerekirse sizin yazdığınız kodu yeniden derler ve yazarım. yeter ki istek sahibi ve çabalayan arkadaşlar olun. Php ile şunu nasıl yaparım diye sorup, daha echo "merhaba dünya"; yazmamış insanlardan ve bunlara yardım etmeye çalışırken hakaret yemekten, aşağılanmaktan rahatsızlık duyduğum ve bu insanların nefreti ile kafa yapılarını bildiğim için artık (bilişim/yazılım vs.) konuyla ilgisi olmayan arkadaşlara önyargılıyım. belli bir düzeye gelmiş arkadaşlar, konu veya özelden istediği gibi hatalarını, sorunlarını yazıp yardım isteyebilirler.

İçerik
  • Bot oluşturmanın gerektirdiği sebepler ve kullanım amacı
  • Bir bot oluşturmak için gereken mantıksal ilişkiyi fikren anlama
  • Bot oluşturmak için gerekenler
  • Php nedir, kullanım alanları nelerdir?
  • Nesne yönelimli programlamaya yüzeysel bakış
  • cURL nedir, nerelerde kullanılır?
  • Detaylı cURL kullanımı
  • Örnek Bot yazımı

Bot oluşturmanın gerektirdiği sebepler ve kullanım amacı

Öncelikle bot nedir, buna değinelim. Bot'u robot kelimesinin kısaltılmış hali olarak düşünebilirsiniz. Botlar, gerçek kullanıcıların yaptığı veya yapmadığı işleri otomatik olarak yapmak için tasarlanan yazılımlardır. Örneğin bir arama moturu için botlar bel kemiğidir, google'da herhangi bir arama yaptığınızda google'ın tasarladığı bu botların ziyaret ettiği sitelere göre sonuçlar görürsünüz. Botlar illa internete bağlı işlemler yapmak zorunda değildir, internete bağlı olan veya olmayan bir program içinde bot yazılabilir. Herşeyden önce botlar, çalışan bir programın yazılımıyla iletişim kurabilmek için bir protokol kullanmak zorundalardır. Bu protokoller birden fazla ağın veya cihazın birbiriyle iletişim kurmasını sağlar ve kullanım alanlarına göre farklılıklar gösterirler. Örneğin bir çağrı merkezine bağlandığınız zaman ve müşteri temsilcisine ulaşmak istediğinizde sizin yaptığınız arama ve bu arama içersinde gerçekleştirdiğiniz tuşlamalar da bir protokol kullanır (pbx). Bu aramada yarı otomatik bir işlem gerçekleştiren bir bot olarak kendinizi düşünebilirsiniz, ihtiyacınıza göre telefona komut verir ve yanıt alırsınız. Böyle uzak bir örnek vermemim sebebi, ufkunuzu genişletmek, olaylara farklı açılardan bakmanızı sağlamak. Gelelim bot oluşturmanın gerekliliğine, neden bot oluşturulur? Botlar normal kullanıcıların yapacağı işlerin zorluğunu veya yükünü azaltmak amacıyla kullanılır. Google'ı ele alalım, bütün internet adreslerini kendi veritabanına kaydetmesi için bir çalışan tutmak zorunda kalsaydı ne olurdu sizce? evet bu iş bitmezdi. Bu yüzden kullanım amacı, insanların yapmakta zorlanacağı işleri hem daha kolay hem de daha hızlı hale getirmektir.​
Bir bot oluşturmak için gereken mantıksal ilişkiyi fikren anlama

Genel olarak benim gördüğüm insanların sosyal medya üzerine bot oluşturmaya çalıştıkları yönünde. Bu yüzden bu anlatımı size instagram üzerinden örneklendirmeye çalışacağım. Hoş instagram dahil, sosyal medya da son 7 yıldır hiç şahsi olarak hesap kullanmadım, bu yüzden yanlış benzetmelerim olursa, bilginiz olsun bireysel kullanımım yok. Örneğin takip ettiğiniz biri var ve yeni paylaşım yapıp yapmadığını kontrol etmek istiyorsunuz. Bunun için önce uygulamayı indirmeniz gerekir, sonrasında kimliğinizi doğrulayarak giriş yapmanız, daha sonrasında kişi aratıp takip etmeniz, takip ettikten sonra profiline girip içeriğini kontrol etmeniz. Niye böyle bir çocuğa anlatır gibi anlattın demeyin, evet bunları hepiniz biliyorsunuz ve önemsiz detaylar bunlar. Peki ya bot kullanımı için, ya bunları herkes biliyor, önemsiz detay kardeşim bunlar yapamıyorsan bırak, deseler? Şimdi, bir insanın basitçe instagramı kullanmasından yola çıkarak, bir botun nasıl davranması gerektiğini analiz edelim. İnsanın başlamak için neye ihtiyacı vardı? Uygulamayı (instagram'ı) indirip çalıştırmaya. Bir bot da aynı şekilde bir programın indirilip kurulmasına ihtiyaç duyabilir, buradaki program çalışma ortamının kendisidir; yani o uygulamaya bağlanmak için bir çalışma ortamına ihtiyaç duyar. Python kullanıyorsanız bu terminal olabilir, C dilleri için visual studio olabilir, sunucu dilleri için sunucu işletim sistemleri olabilir. Çalışma ortamını hazırladıktan sonra ise, nasıl ki siz instagramda kullanıcı adı ve şifrenizi doğrulyarak oturum açıyorsanız, bir botta bir internet sitesine bağlanmaya çalıştığı esnada oturum doğrulaması gerekebilir veya nasıl ki açık profilleri uygulamaya giriş yapmadan görebiliyorsanız, bir botta oturum doğrulaması olmaksızın etkileşime geçebilir. ancak sizin etkileşim için nasıl ki kısıtlı imkanlarınız varsa (oturum açmadan hikaye paylaşıp dm'yi kullanamıyorsanız) botta aynı şekilde kısıtlanmış bir erişime sahip olabilir. Bunları bir çocuğa anlatır gibi anlatıyorum evet, çünkü sorulan sorular, açılan konular bu seviyeye indirdi beni. ilerleyen maddelerde, bu betimlemeleri teorik olarak teknik terimler ile değiştireceğim, bu yüzden o terimleri ve anlatımı anlamanız için burada zemin hazırlıyorum. Kısaca bir bot, öncelikle bir çalışma ortamına ihtiyaç duyar, daha sonrasında bağlandığı ağın özelliklerine ve yanıtlarına göre, işlem gerçekleştirebilmesi için kendi kimliğini doğrulaması gerekebilir, katı kuralları yoksa kısıtlı işlemleri kimliğini doğrulamadan yapabilir. bu işlemler tıpkı sizin yaptığınız sorgulamalar gibi program diline has bir sorgulama içerir ve sunucuya iletildiği zaman, sizin aldığınız arama sonuçları gibi yanıtlanarak istek sonuçlandırılır. daha sonrasında bu isteği işleyip işlememe konusunda karar verir, örneğin çıkan arama sonuçlarında sizin birini takip etmeniz veya etmemeniz gibi mantıksal kararlardır bunlar.​
Bot oluşturmak için gerekenler

Bir programlama dili bilmek​
Kullanacağınız iletişim protokolünü hakkında bilginiz olması​
Kullanacağınız dili çalıştırmanızı sağlayacak bir çalışma ortamı​
Regex algoritmasına hakim olmak (duruma göre değişir)​
PHP nedir, kullanım alanları nelerdir?

bu konuda detaylı bir anlatım yapmayacağım, bu tarz konularla ilgileniyorsanız zaten az çok fikriniz bulunuyordu. PHP internet için üretilmiş ve internet sitelerinin barındığı cihazlarda (sunucuda) sitenin davranışlarını programlayan veya doğrudan sunucuda gerçekleşen işlemleri programlayan bir dildir. PHP, bazı (amatör) yazarlarının bilmediği imkanlarda sunar, gömülü (mikro çipler) sistemleri programlamak veya GTK ile masaüstü programları yazabilmek gibi.

Nesne yönelimli programlamaya yüzeysel bakış

Bunu aslında bir kod yazma prensibine benzetebilirsiniz ve bu madde de vereceğim bilgiler kesinlikle yetersiz ve konuya ufak bir değinmedir sadece. Bu yüzden bu konu üzerine araştırmanızı önemle tavsiye ederim. bu konuda bilgi vermem için, örnek kodlamalar yapmam gereceğinden wikipedia'dan alıntı yapıyorum;​
"1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutları sürekli artıyor, ancak belli bir nitelik düzeyi korumak için gereken bakımın maliyeti zaman ve çaba olarak daha da hızlı artıyordu. NYP'yi bu soruna karşı bir çözüm haline getiren başlıca özelliği, yazılımda birimselliği (modularity) benimsemesidir. NYP ayrıca, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır. Sağladığı bu avantajlardan dolayı, NYP günümüzde geniş çaplı yazılım projelerinde yaygın olarak kullanılmaktadır."

cURL nedir, nerelerde kullanılır?

cURL, libcurl kütüphanesi içerisinde bulunan ve veri alışverişi sağlamak maksadıyla iletişim protokollerini kullanan bir yazılımdır. Kullanım alanları saymak, kullanımı olmayan alanları saymaktan daha zordur. Standart bir kullanıcının bildiği bütün işletim sistemlerinde çalıştırılabilir ve 50'e yakın program dili cURL'u destekler. kullanımını aşağıdaki detaylı olarak anlatacağım, yinede daha detaylı bilgi almak isteyenler internette cURL için araştırma yapabilirler.​

Detaylı cURL kullanımı

Kullanımına geçmeden önce, nasıl kullanılır sorunu sormakta fayda var. Bunun için ekstra bir program kurmanız gerekmiyor. benim anla işletim sistemim windows olmasına rağmen, ben linux'un bash komutları üzerinden anlatmayı tercih ediyorum. Windows ile hemen hemen aynı kullanıma sahip olsalar da, ufak sözdizimi farklılıkları bulunmaktadır. Ancak temel istek ikisinde aynıdır. Yukarıda protokollerden bahsetmiştik, herhangi bir protokol belirtmediğimiz için standart olarak HTTP yani internet protokolünü kullanmış oluyoruz, ayrıca bağlantı önünce // kısmında aslında protokol de belirtmiş oluruz örneğin https://.​
temel örnek​
Bash:
curl "https://www.turkhackteam.org"
burada curl ile turkhackteam.org sitesine bağlanmak için https protokolü üzerinden bir istekte bulunduk, ancak bu istekteki yanıt herhangi bir derleme veya yorumlanma yapılmadığı için bize kaynak olarak gelmiş oldu. yani tarayıcının bize görsel olarak sunduğu, tıkladığımız yazdığımız ekranın görsel olmayan halini HTML dili olarak verdi.​
Curl ile veri gönderme​
bunun için --data ifadesini kullanırız, kısa hali -d olarak geçer ikiside aynı komutu çalıştırır​
Bash:
curl https://www.turkhackteam.org
    -d "search=curl+nedir"
yukarıdaki kullanım en temel veri gönderme yöntemidir. bu yönteme belirli methodlar eklemeniz için --request veya kısaca -X kullanabilirsiniz. x büyük olmalı, küçük olan proxy ve benzeri görevlerde rol oynuyor. örneğin bu istek bir get değeri olsaydı data olarak belirtmemize gerek kalmazdı, ancak sunucu özellikle bunun post değeri olduğunun belirtilmesini isteyebilir. o zamanda bu kullanım aklımızda kalsın, ama aşağıdakini tercih edelim

Bash:
curl -X POST https://www.turkhackteam.org
    -d "search=curl+nedir" \
    -d "theme=dark" \
-X değerini yukarıda açıklamıştım, gelelim POST olayına, buralara kadar geldiyseniz formda veri göndermek için kullanılan bir method olduğunu zaten biliyorsunuz. peki neden ters slash koydum? normal kullanımı bu şekildedir, ancak siz tersh slash kullanmasanı da çalışacaktır. birdeb fazla -d yazmak şart mıydı peki? hayır değil, okunabilirliği kolaylaştırdığı için birden fazla -d koydum, normalde tek değer içerisinde bunu yapabilirdiniz, o zaman parametreleri ayrıştırmak için & operatörüne ihtiyaç duyardınız, yani şöyle;

Bash:
curl -X POST https://www.turkhackteam.org
    -d "search=curl+nedir&theme=dark"
bir sunucuya böyle bir istekte bulunduk, ancak beklediğimiz gibi yanıt alamadık. bunun sebebi gönderdiğimiz veriyi her ne kadar parametre olarak belirtmiş olsakta, sunucu başlığı içersinde bu olay için herhangi bir açıklama yapmamamız olabilir. bu yüzden bu kullanımda aklınızda kalsın ama aşağıdakini tercih etmeye çalışın,​
Bash:
curl -X POST https://www.turkhackteam.org
    -H "Content-Type: application/x-www-form-urlencoded"
    -d "search=curl+nedir&theme=dark"

-h sunucuya, sunucu ham olarak HTTP protokolü içerisinde bilgi vermek için kullanılır uzun hali --header biz kısaca -h olarak belirttik. diyelim ki biz bu isteklerimizi bir dosya olarak kaydetmek istiyoruz. o zaman -o değerini kullanmamız gerekiyor, yanılmıyorsam uzun hali --out veya --output olmalı. yani çıktı değer demek. bu değerin önüne yazdıklarınız dosya adını tanımlar, ancak bağlandığınız sunucu dosya için bir isim belirlediyse, o dosyayı indirirken belirttiğiniz isim değerini yok sayar böyle durumlar için -O şeklinde doğrudan da kullanabilirsiniz. büyük O uzak sunucudaki adıyla kaydeder.

Bash:
curl -o "THT.html" "https://www.turkhackteam.org"
veya
Bash:
curl -O "https://www.turkhackteam.org"
sonuç;
41ll3it.jpg

yoruldum yahu. son olarak proxy kullanımına değineceğim curl için. az miktarda komuta değindiğimin farkındayım, ancak ben detaylıdan kasıt olarak anlatım ve mantık üzerine detaydan bahsettim, tüm methodları yazacağım anlamına gelmez bu, ki komutların sonunda sizler için basit ipuçlarını da vereceğim. neyse. proxy kullanımına geçmeden önce, proxy için kullanılan socks protokolünden bahsetmek istiyorum, temel olarak ikiye (socks4 ve socks5) ayrılırlar ve yaptıkları işin bakımından bir fark yoktur. sadece socks5 isteğe kullanıcı şifre özelliği sunar. ancak ücretsiz kullanımlarda ve kişisel adresiniz değilse socks4'ü tercih etmenizi tavsiye ederim, daha güvensiz ve sağlayıcılarının çok olması sebebiyle daha hızlıdırlar. socks5'i ücretsiz sunan az firma vardır ve bu yüzden sunulan ağı sock4 kullanan bir proxy'e göre daha çok yoruyorlar ve oturum doğrulama gibi aksaklıklar yaşatabiliyorlar. evet proxy kullanımına geçelim​
Bash:
curl -x 125.213.194.26:5678 https://turkhackteam.org
qjyckwf.jpg

hata almama sevindim. gördüğünüz gibi ilk belirttiğim proxy adresi kullanım dışı olduğu için, iki kere denedikten sonra yeni bir adres ile tekrar denedim bu kez farklı bir hata aldım. bu kullanımındaki her şeyi daha önceden anlatmıştım sadece size farklı gelecek tek şey bir takım sayılar :) birde bu sefer x'in küçük olmasına dikkat etmişsinizdir, ilk istekte büyük ile küçük arasındaki farkı açıklamıştım. bu sayılar ise proxy hizmetini sağlayan sunucunun ip adresleri iki nokta üst üsteden sonraki kısımda yani : bundan sonraki kısımda ip adresinin port'u. resimde gördüğünüz gibi istek zaman aşımına uğradı, peki niye? site bu lokasyondan bağlantı kabul etmiyor olabilir veya lokasyon farkından dolayı istek normalden uzun sürüyor olabilir. peki bunun için ne yapılabilir? zaman aşımı için süreyi yeniden ayarlayabiliriz ama bundan önce, bir komut için harcanan süreyi ayarlamayı göstermek istiyorum. bunun için -m ifadesini kullanacağınız uzun hali --max-time birleşik.

Bash:
curl -m 15 -x 125.213.194.26:5678 https://turkhackteam.org
sanırımkonuya resim ekleme hakkım dolmuş, hata alıyorum. neyse.
gördüğünüz gibi komutun çalışmasını saniye cinsinden 15 olarak belirttim. bana dönen sonuçta ise 15015 mili saniyeden sonra istek zaman aşımına uğradığı söyledi. yani burada ne olmuş oldu, ben curl'a dedim ki "hacı bu komutu 15 saniye kadar çalıştırabilirsin" şimdi ne diyeceğim peki? zaman aşımını 30 saniye olarak belirle. peki komut çalışma süresi 15 saniye ve zaman aşımı süresi 30 saniye olursa ne olur? 15 saniye içersin de yanıt alamazsam, 15 saniyelik çalışma süresi dolmuş olacağından benim ayarladığımı 30 saniyelik zaman aşımı süresinin bir hükmü kalmaz. dolayısıyla komut çalışma süresi ile zaman aşımı sürelerini anlatma ihtiyacı duydum, daha sonra çok kafanızı karıştırabilirdi bu durum. şimdi sadece zaman aşımına müdahale edeceğim komutun çalışması için bir sınır tanımı olmayacak. bu sefer kullanacağımız komut --connect-timeout benim bildiğim kısa karşılığı yok.

Bash:
curl --connect-timeout 30 -x 125.213.194.26:5678 https://turkhackteam.org
yukarıda gördüğünüz gibi zaman aşımı süresini 30 saniye yaptım. 0 yapsaydım zaman aşımını kapatmış olurdum, yinede yanıt alamazsa zaman aşımına uğrar bir hata alırdı, kapanmış olması mutlak istek göndereceği anlamına gelmez. bu arada binary yani iki sistemde yapılan ayarlar 0 veya 1 şeklindedir, 0 false değeri taşır ve bir ayarı kapatır, 1 true değeri taşır ve özelliği aktif hale getirir veya açar. bu true ve false olayıda boolean olarak geçer. neyse. eğer burada proxy protkolü belirtmek isteseydim, --socks4 , veya 4a veya 5 yazmam gerekirdi. eğer protokol belirtirsem, -x ifadesini kaldırmam gerekir.

Bash:
curl --socks4 125.213.194.26:5678 https://turkhackteam.org
peki socks5 kullansaydım ne olurdu? bu sefer oturumumu doğrulamak için parola belirtmek durumunda kalırdım bu durumda da : ifadesini kullanırdım, nasıl ki ip ile portu ayırıyorsa aynı şekilde kullanıcı adı ve şifresini ayırır. önce kullanıcı adı sonra şifre şeklinde. bu sefer kullanacağımız ifade -u küçük olanı genel geçer kullanım, kullanıcı adı ve şifre demek, proxy içinde kullanılabilir, ama proxy için olan kullanımı aslında büyük olanı -U

Bash:
curl -U THT:sifre --socks5 125.213.194.26:5678 https://turkhackteam.org
yukarıdaki örnek kullanımın diğerlerinden tek farkı basına -U geldikten sonra kullanici:sifre şeklinde değer girmeniz.
gelelim ufak ipuçlarına;
öncelikle ben hiç sıfırdan curl komutu yazmıyorum, örnek ve temel ayarları benim için yapması için aşağıdaki siteye url adresi giriyorum;
daha sonra bu kalıp üzerinden kodlamaya devam ediyorum. bunu sıfırdan kodlayamadan için değil, pratik olduğu için tercih ediyorum ve çeşitli dillere dönüştürme olanağı sağlıyor.

diğer bir ipucu ise tarayıcının geliştirmek amacıyla kullanılan denetim kısmı. orada mevcut sayfa için çeşitli dillerde yapılacak curl istekleri, header bilgileri ile doğrudan verilmekte. konuya artık resim ekleyemediğimden resmi link olarak aşağıya bırakıyorum.

farklı kullanımları ve komutları öğrenmek için
resmi sitesi: curl
geliştiriciler için ayrıntılı döküman sitesi: Introduction

Örnek bot yazımı

evet. örnek botu daha önce yazdığım çalışmalardan birinden kullanacağım. bu bot ne yapacak peki? bir pdf kitap sitesine bağlanarak, arama metnimize göre oradaki kitapları bize listeleyecek, daha sonrasında seçtiğimiz kitap için bize pdf versiyonunu okuma şansı verecek, bunun dışında pdf'i string değere dönüştürerek daha sonrasında javascript kullanımıyla seslendirecek. yani oraya yazacağımız komut ile, o kitabı bize bulacak, çevirecek ve okuyacak. bunu PHP ve javascript kullanarak yazmıştım, detaylı olarak anlatımını yapacağım. yalnız öncesinde bir saat falan dinlenmek istiyorum. zaten konuda karakter sınırlaması var, 5k karakterden sonra ikinci post'a geçmem gerekiyor. gece gibi konunun devamı gelir.
 
Son düzenleme:

Mertoktay5

Üye
5 Ara 2021
227
95
1. bölüm (şuan buradasınız)
2. bölüm
3. bölüm

Merhaba,

hayatımız "copy, paste" olmuş, al oradan yapıştır buraya, konu yazmış ol, İçerikle alakalı fikrin olmasın. Öğrenmek isteyen arkadaşlar için, önemsiz gibi duran ama ufak detaylar sayesinde daha iyi algılamanızı sağlayacak bir konuyu, bilen biri hazırlasın düşüncesiyle hazırlamak istedim. Konu sonunda da yaptığınız çalışmayla ilgili yardıma ihtiyacınız olur, hata alırsınız, işin içinden çıkamazsınız, gerekirse sizin yazdığınız kodu yeniden derler ve yazarım. yeter ki istek sahibi ve çabalayan arkadaşlar olun. Php ile şunu nasıl yaparım diye sorup, daha echo "merhaba dünya"; yazmamış insanlardan ve bunlara yardım etmeye çalışırken hakaret yemekten, aşağılanmaktan rahatsızlık duyduğum ve bu insanların nefreti ile kafa yapılarını bildiğim için artık (bilişim/yazılım vs.) konuyla ilgisi olmayan arkadaşlara önyargılıyım. belli bir düzeye gelmiş arkadaşlar, konu veya özelden istediği gibi hatalarını, sorunlarını yazıp yardım isteyebilirler.

İçerik
  • Bot oluşturmanın gerektirdiği sebepler ve kullanım amacı
  • Bir bot oluşturmak için gereken mantıksal ilişkiyi fikren anlama
  • Bot oluşturmak için gerekenler
  • Php nedir, kullanım alanları nelerdir?
  • Nesne yönelimli programlamaya yüzeysel bakış
  • cURL nedir, nerelerde kullanılır?
  • Detaylı cURL kullanımı
  • Örnek Bot yazımı

Bot oluşturmanın gerektirdiği sebepler ve kullanım amacı

Öncelikle bot nedir, buna değinelim. Bot'u robot kelimesinin kısaltılmış hali olarak düşünebilirsiniz. Botlar, gerçek kullanıcıların yaptığı veya yapmadığı işleri otomatik olarak yapmak için tasarlanan yazılımlardır. Örneğin bir arama moturu için botlar bel kemiğidir, google'da herhangi bir arama yaptığınızda google'ın tasarladığı bu botların ziyaret ettiği sitelere göre sonuçlar görürsünüz. Botlar illa internete bağlı işlemler yapmak zorunda değildir, internete bağlı olan veya olmayan bir program içinde bot yazılabilir. Herşeyden önce botlar, çalışan bir programın yazılımıyla iletişim kurabilmek için bir protokol kullanmak zorundalardır. Bu protokoller birden fazla ağın veya cihazın birbiriyle iletişim kurmasını sağlar ve kullanım alanlarına göre farklılıklar gösterirler. Örneğin bir çağrı merkezine bağlandığınız zaman ve müşteri temsilcisine ulaşmak istediğinizde sizin yaptığınız arama ve bu arama içersinde gerçekleştirdiğiniz tuşlamalar da bir protokol kullanır (pbx). Bu aramada yarı otomatik bir işlem gerçekleştiren bir bot olarak kendinizi düşünebilirsiniz, ihtiyacınıza göre telefona komut verir ve yanıt alırsınız. Böyle uzak bir örnek vermemim sebebi, ufkunuzu genişletmek, olaylara farklı açılardan bakmanızı sağlamak. Gelelim bot oluşturmanın gerekliliğine, neden bot oluşturulur? Botlar normal kullanıcıların yapacağı işlerin zorluğunu veya yükünü azaltmak amacıyla kullanılır. Google'ı ele alalım, bütün internet adreslerini kendi veritabanına kaydetmesi için bir çalışan tutmak zorunda kalsaydı ne olurdu sizce? evet bu iş bitmezdi. Bu yüzden kullanım amacı, insanların yapmakta zorlanacağı işleri hem daha kolay hem de daha hızlı hale getirmektir.​
Bir bot oluşturmak için gereken mantıksal ilişkiyi fikren anlama

Genel olarak benim gördüğüm insanların sosyal medya üzerine bot oluşturmaya çalıştıkları yönünde. Bu yüzden bu anlatımı size instagram üzerinden örneklendirmeye çalışacağım. Hoş instagram dahil, sosyal medya da son 7 yıldır hiç şahsi olarak hesap kullanmadım, bu yüzden yanlış benzetmelerim olursa, bilginiz olsun bireysel kullanımım yok. Örneğin takip ettiğiniz biri var ve yeni paylaşım yapıp yapmadığını kontrol etmek istiyorsunuz. Bunun için önce uygulamayı indirmeniz gerekir, sonrasında kimliğinizi doğrulayarak giriş yapmanız, daha sonrasında kişi aratıp takip etmeniz, takip ettikten sonra profiline girip içeriğini kontrol etmeniz. Niye böyle bir çocuğa anlatır gibi anlattın demeyin, evet bunları hepiniz biliyorsunuz ve önemsiz detaylar bunlar. Peki ya bot kullanımı için, ya bunları herkes biliyor, önemsiz detay kardeşim bunlar yapamıyorsan bırak, deseler? Şimdi, bir insanın basitçe instagramı kullanmasından yola çıkarak, bir botun nasıl davranması gerektiğini analiz edelim. İnsanın başlamak için neye ihtiyacı vardı? Uygulamayı (instagram'ı) indirip çalıştırmaya. Bir bot da aynı şekilde bir programın indirilip kurulmasına ihtiyaç duyabilir, buradaki program çalışma ortamının kendisidir; yani o uygulamaya bağlanmak için bir çalışma ortamına ihtiyaç duyar. Python kullanıyorsanız bu terminal olabilir, C dilleri için visual studio olabilir, sunucu dilleri için sunucu işletim sistemleri olabilir. Çalışma ortamını hazırladıktan sonra ise, nasıl ki siz instagramda kullanıcı adı ve şifrenizi doğrulyarak oturum açıyorsanız, bir botta bir internet sitesine bağlanmaya çalıştığı esnada oturum doğrulaması gerekebilir veya nasıl ki açık profilleri uygulamaya giriş yapmadan görebiliyorsanız, bir botta oturum doğrulaması olmaksızın etkileşime geçebilir. ancak sizin etkileşim için nasıl ki kısıtlı imkanlarınız varsa (oturum açmadan hikaye paylaşıp dm'yi kullanamıyorsanız) botta aynı şekilde kısıtlanmış bir erişime sahip olabilir. Bunları bir çocuğa anlatır gibi anlatıyorum evet, çünkü sorulan sorular, açılan konular bu seviyeye indirdi beni. ilerleyen maddelerde, bu betimlemeleri teorik olarak teknik terimler ile değiştireceğim, bu yüzden o terimleri ve anlatımı anlamanız için burada zemin hazırlıyorum. Kısaca bir bot, öncelikle bir çalışma ortamına ihtiyaç duyar, daha sonrasında bağlandığı ağın özelliklerine ve yanıtlarına göre, işlem gerçekleştirebilmesi için kendi kimliğini doğrulaması gerekebilir, katı kuralları yoksa kısıtlı işlemleri kimliğini doğrulamadan yapabilir. bu işlemler tıpkı sizin yaptığınız sorgulamalar gibi program diline has bir sorgulama içerir ve sunucuya iletildiği zaman, sizin aldığınız arama sonuçları gibi yanıtlanarak istek sonuçlandırılır. daha sonrasında bu isteği işleyip işlememe konusunda karar verir, örneğin çıkan arama sonuçlarında sizin birini takip etmeniz veya etmemeniz gibi mantıksal kararlardır bunlar.​
Bot oluşturmak için gerekenler

Bir programlama dili bilmek​
Kullanacağınız iletişim protokolünü hakkında bilginiz olması​
Kullanacağınız dili çalıştırmanızı sağlayacak bir çalışma ortamı​
Regex algoritmasına hakim olmak (duruma göre değişir)​
PHP nedir, kullanım alanları nelerdir?

bu konuda detaylı bir anlatım yapmayacağım, bu tarz konularla ilgileniyorsanız zaten az çok fikriniz bulunuyordu. PHP internet için üretilmiş ve internet sitelerinin barındığı cihazlarda (sunucuda) sitenin davranışlarını programlayan veya doğrudan sunucuda gerçekleşen işlemleri programlayan bir dildir. PHP, bazı (amatör) yazarlarının bilmediği imkanlarda sunar, gömülü (mikro çipler) sistemleri programlamak veya GTK ile masaüstü programları yazabilmek gibi.

Nesne yönelimli programlamaya yüzeysel bakış

Bunu aslında bir kod yazma prensibine benzetebilirsiniz ve bu madde de vereceğim bilgiler kesinlikle yetersiz ve konuya ufak bir değinmedir sadece. Bu yüzden bu konu üzerine araştırmanızı önemle tavsiye ederim. bu konuda bilgi vermem için, örnek kodlamalar yapmam gereceğinden wikipedia'dan alıntı yapıyorum;​
"1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutları sürekli artıyor, ancak belli bir nitelik düzeyi korumak için gereken bakımın maliyeti zaman ve çaba olarak daha da hızlı artıyordu. NYP'yi bu soruna karşı bir çözüm haline getiren başlıca özelliği, yazılımda birimselliği (modularity) benimsemesidir. NYP ayrıca, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır. Sağladığı bu avantajlardan dolayı, NYP günümüzde geniş çaplı yazılım projelerinde yaygın olarak kullanılmaktadır."

cURL nedir, nerelerde kullanılır?

cURL, libcurl kütüphanesi içerisinde bulunan ve veri alışverişi sağlamak maksadıyla iletişim protokollerini kullanan bir yazılımdır. Kullanım alanları saymak, kullanımı olmayan alanları saymaktan daha zordur. Standart bir kullanıcının bildiği bütün işletim sistemlerinde çalıştırılabilir ve 50'e yakın program dili cURL'u destekler. kullanımını aşağıdaki detaylı olarak anlatacağım, yinede daha detaylı bilgi almak isteyenler internette cURL için araştırma yapabilirler.​

Detaylı cURL kullanımı

Kullanımına geçmeden önce, nasıl kullanılır sorunu sormakta fayda var. Bunun için ekstra bir program kurmanız gerekmiyor. benim anla işletim sistemim windows olmasına rağmen, ben linux'un bash komutları üzerinden anlatmayı tercih ediyorum. Windows ile hemen hemen aynı kullanıma sahip olsalar da, ufak sözdizimi farklılıkları bulunmaktadır. Ancak temel istek ikisinde aynıdır. Yukarıda protokollerden bahsetmiştik, herhangi bir protokol belirtmediğimiz için standart olarak HTTP yani internet protokolünü kullanmış oluyoruz, ayrıca bağlantı önünce // kısmında aslında protokol de belirtmiş oluruz örneğin https://.​
temel örnek​
Bash:
curl "https://www.turkhackteam.org"
burada curl ile turkhackteam.org sitesine bağlanmak için https protokolü üzerinden bir istekte bulunduk, ancak bu istekteki yanıt herhangi bir derleme veya yorumlanma yapılmadığı için bize kaynak olarak gelmiş oldu. yani tarayıcının bize görsel olarak sunduğu, tıkladığımız yazdığımız ekranın görsel olmayan halini HTML dili olarak verdi.​
Curl ile veri gönderme​
bunun için --data ifadesini kullanırız, kısa hali -d olarak geçer ikiside aynı komutu çalıştırır​
Bash:
curl https://www.turkhackteam.org
    -d "search=curl+nedir"
yukarıdaki kullanım en temel veri gönderme yöntemidir. bu yönteme belirli methodlar eklemeniz için --request veya kısaca -X kullanabilirsiniz. x büyük olmalı, küçük olan proxy ve benzeri görevlerde rol oynuyor. örneğin bu istek bir get değeri olsaydı data olarak belirtmemize gerek kalmazdı, ancak sunucu özellikle bunun post değeri olduğunun belirtilmesini isteyebilir. o zamanda bu kullanım aklımızda kalsın, ama aşağıdakini tercih edelim

Bash:
curl -X POST https://www.turkhackteam.org
    -d "search=curl+nedir" \
    -d "theme=dark" \
-X değerini yukarıda açıklamıştım, gelelim POST olayına, buralara kadar geldiyseniz formda veri göndermek için kullanılan bir method olduğunu zaten biliyorsunuz. peki neden ters slash koydum? normal kullanımı bu şekildedir, ancak siz tersh slash kullanmasanı da çalışacaktır. birdeb fazla -d yazmak şart mıydı peki? hayır değil, okunabilirliği kolaylaştırdığı için birden fazla -d koydum, normalde tek değer içerisinde bunu yapabilirdiniz, o zaman parametreleri ayrıştırmak için & operatörüne ihtiyaç duyardınız, yani şöyle;

Bash:
curl -X POST https://www.turkhackteam.org
    -d "search=curl+nedir&theme=dark"
bir sunucuya böyle bir istekte bulunduk, ancak beklediğimiz gibi yanıt alamadık. bunun sebebi gönderdiğimiz veriyi her ne kadar parametre olarak belirtmiş olsakta, sunucu başlığı içersinde bu olay için herhangi bir açıklama yapmamamız olabilir. bu yüzden bu kullanımda aklınızda kalsın ama aşağıdakini tercih etmeye çalışın,​
Bash:
curl -X POST https://www.turkhackteam.org
    -H "Content-Type: application/x-www-form-urlencoded"
    -d "search=curl+nedir&theme=dark"

-h sunucuya, sunucu ham olarak HTTP protokolü içerisinde bilgi vermek için kullanılır uzun hali --header biz kısaca -h olarak belirttik. diyelim ki biz bu isteklerimizi bir dosya olarak kaydetmek istiyoruz. o zaman -o değerini kullanmamız gerekiyor, yanılmıyorsam uzun hali --out veya --output olmalı. yani çıktı değer demek. bu değerin önüne yazdıklarınız dosya adını tanımlar, ancak bağlandığınız sunucu dosya için bir isim belirlediyse, o dosyayı indirirken belirttiğiniz isim değerini yok sayar böyle durumlar için -O şeklinde doğrudan da kullanabilirsiniz. büyük O uzak sunucudaki adıyla kaydeder.

Bash:
curl -o "THT.html" "https://www.turkhackteam.org"
veya
Bash:
curl -O "https://www.turkhackteam.org"
sonuç;
41ll3it.jpg

yoruldum yahu. son olarak proxy kullanımına değineceğim curl için. az miktarda komuta değindiğimin farkındayım, ancak ben detaylıdan kasıt olarak anlatım ve mantık üzerine detaydan bahsettim, tüm methodları yazacağım anlamına gelmez bu, ki komutların sonunda sizler için basit ipuçlarını da vereceğim. neyse. proxy kullanımına geçmeden önce, proxy için kullanılan socks protokolünden bahsetmek istiyorum, temel olarak ikiye (socks4 ve socks5) ayrılırlar ve yaptıkları işin bakımından bir fark yoktur. sadece socks5 isteğe kullanıcı şifre özelliği sunar. ancak ücretsiz kullanımlarda ve kişisel adresiniz değilse socks4'ü tercih etmenizi tavsiye ederim, daha güvensiz ve sağlayıcılarının çok olması sebebiyle daha hızlıdırlar. socks5'i ücretsiz sunan az firma vardır ve bu yüzden sunulan ağı sock4 kullanan bir proxy'e göre daha çok yoruyorlar ve oturum doğrulama gibi aksaklıklar yaşatabiliyorlar. evet proxy kullanımına geçelim​
Bash:
curl -x 125.213.194.26:5678 https://turkhackteam.org
qjyckwf.jpg

hata almama sevindim. gördüğünüz gibi ilk belirttiğim proxy adresi kullanım dışı olduğu için, iki kere denedikten sonra yeni bir adres ile tekrar denedim bu kez farklı bir hata aldım. bu kullanımındaki her şeyi daha önceden anlatmıştım sadece size farklı gelecek tek şey bir takım sayılar :) birde bu sefer x'in küçük olmasına dikkat etmişsinizdir, ilk istekte büyük ile küçük arasındaki farkı açıklamıştım. bu sayılar ise proxy hizmetini sağlayan sunucunun ip adresleri iki nokta üst üsteden sonraki kısımda yani : bundan sonraki kısımda ip adresinin port'u. resimde gördüğünüz gibi istek zaman aşımına uğradı, peki niye? site bu lokasyondan bağlantı kabul etmiyor olabilir veya lokasyon farkından dolayı istek normalden uzun sürüyor olabilir. peki bunun için ne yapılabilir? zaman aşımı için süreyi yeniden ayarlayabiliriz ama bundan önce, bir komut için harcanan süreyi ayarlamayı göstermek istiyorum. bunun için -m ifadesini kullanacağınız uzun hali --max-time birleşik.

Bash:
curl -m 15 -x 125.213.194.26:5678 https://turkhackteam.org
sanırımkonuya resim ekleme hakkım dolmuş, hata alıyorum. neyse.
gördüğünüz gibi komutun çalışmasını saniye cinsinden 15 olarak belirttim. bana dönen sonuçta ise 15015 mili saniyeden sonra istek zaman aşımına uğradığı söyledi. yani burada ne olmuş oldu, ben curl'a dedim ki "hacı bu komutu 15 saniye kadar çalıştırabilirsin" şimdi ne diyeceğim peki? zaman aşımını 30 saniye olarak belirle. peki komut çalışma süresi 15 saniye ve zaman aşımı süresi 30 saniye olursa ne olur? 15 saniye içersin de yanıt alamazsam, 15 saniyelik çalışma süresi dolmuş olacağından benim ayarladığımı 30 saniyelik zaman aşımı süresinin bir hükmü kalmaz. dolayısıyla komut çalışma süresi ile zaman aşımı sürelerini anlatma ihtiyacı duydum, daha sonra çok kafanızı karıştırabilirdi bu durum. şimdi sadece zaman aşımına müdahale edeceğim komutun çalışması için bir sınır tanımı olmayacak. bu sefer kullanacağımız komut --connect-timeout benim bildiğim kısa karşılığı yok.

Bash:
curl --connect-timeout 30 -x 125.213.194.26:5678 https://turkhackteam.org
yukarıda gördüğünüz gibi zaman aşımı süresini 30 saniye yaptım. 0 yapsaydım zaman aşımını kapatmış olurdum, yinede yanıt alamazsa zaman aşımına uğrar bir hata alırdı, kapanmış olması mutlak istek göndereceği anlamına gelmez. bu arada binary yani iki sistemde yapılan ayarlar 0 veya 1 şeklindedir, 0 false değeri taşır ve bir ayarı kapatır, 1 true değeri taşır ve özelliği aktif hale getirir veya açar. bu true ve false olayıda boolean olarak geçer. neyse. eğer burada proxy protkolü belirtmek isteseydim, --socks4 , veya 4a veya 5 yazmam gerekirdi. eğer protokol belirtirsem, -x ifadesini kaldırmam gerekir.

Bash:
curl --socks4 125.213.194.26:5678 https://turkhackteam.org
peki socks5 kullansaydım ne olurdu? bu sefer oturumumu doğrulamak için parola belirtmek durumunda kalırdım bu durumda da : ifadesini kullanırdım, nasıl ki ip ile portu ayırıyorsa aynı şekilde kullanıcı adı ve şifresini ayırır. önce kullanıcı adı sonra şifre şeklinde. bu sefer kullanacağımız ifade -u küçük olanı genel geçer kullanım, kullanıcı adı ve şifre demek, proxy içinde kullanılabilir, ama proxy için olan kullanımı aslında büyük olanı -U

Bash:
curl -U THT:sifre --socks5 125.213.194.26:5678 https://turkhackteam.org
yukarıdaki örnek kullanımın diğerlerinden tek farkı basına -U geldikten sonra kullanici:sifre şeklinde değer girmeniz.
gelelim ufak ipuçlarına;
öncelikle ben hiç sıfırdan curl komutu yazmıyorum, örnek ve temel ayarları benim için yapması için aşağıdaki siteye url adresi giriyorum;
daha sonra bu kalıp üzerinden kodlamaya devam ediyorum. bunu sıfırdan kodlayamadan için değil, pratik olduğu için tercih ediyorum ve çeşitli dillere dönüştürme olanağı sağlıyor.

diğer bir ipucu ise tarayıcının geliştirmek amacıyla kullanılan denetim kısmı. orada mevcut sayfa için çeşitli dillerde yapılacak curl istekleri, header bilgileri ile doğrudan verilmekte. konuya artık resim ekleyemediğimden resmi link olarak aşağıya bırakıyorum.

farklı kullanımları ve komutları öğrenmek için
resmi sitesi: curl
geliştiriciler için ayrıntılı döküman sitesi: Introduction

Örnek bot yazımı

evet. örnek botu daha önce yazdığım çalışmalardan birinden kullanacağım. bu bot ne yapacak peki? bir pdf kitap sitesine bağlanarak, arama metnimize göre oradaki kitapları bize listeleyecek, daha sonrasında seçtiğimiz kitap için bize pdf versiyonunu okuma şansı verecek, bunun dışında pdf'i string değere dönüştürerek daha sonrasında javascript kullanımıyla seslendirecek. yani oraya yazacağımız komut ile, o kitabı bize bulacak, çevirecek ve okuyacak. bunu PHP ve javascript kullanarak yazmıştım, detaylı olarak anlatımını yapacağım. yalnız öncesinde bir saat falan dinlenmek istiyorum. zaten konuda karakter sınırlaması var, 5k karakterden sonra ikinci post'a geçmem gerekiyor. gece gibi konunun devamı gelir.
(y)
 

Nolife

Üye
28 Mar 2021
241
77
1. bölüm (şuan buradasınız)
2. bölüm
3. bölüm

Merhaba,

hayatımız "copy, paste" olmuş, al oradan yapıştır buraya, konu yazmış ol, İçerikle alakalı fikrin olmasın. Öğrenmek isteyen arkadaşlar için, önemsiz gibi duran ama ufak detaylar sayesinde daha iyi algılamanızı sağlayacak bir konuyu, bilen biri hazırlasın düşüncesiyle hazırlamak istedim. Konu sonunda da yaptığınız çalışmayla ilgili yardıma ihtiyacınız olur, hata alırsınız, işin içinden çıkamazsınız, gerekirse sizin yazdığınız kodu yeniden derler ve yazarım. yeter ki istek sahibi ve çabalayan arkadaşlar olun. Php ile şunu nasıl yaparım diye sorup, daha echo "merhaba dünya"; yazmamış insanlardan ve bunlara yardım etmeye çalışırken hakaret yemekten, aşağılanmaktan rahatsızlık duyduğum ve bu insanların nefreti ile kafa yapılarını bildiğim için artık (bilişim/yazılım vs.) konuyla ilgisi olmayan arkadaşlara önyargılıyım. belli bir düzeye gelmiş arkadaşlar, konu veya özelden istediği gibi hatalarını, sorunlarını yazıp yardım isteyebilirler.

İçerik
  • Bot oluşturmanın gerektirdiği sebepler ve kullanım amacı
  • Bir bot oluşturmak için gereken mantıksal ilişkiyi fikren anlama
  • Bot oluşturmak için gerekenler
  • Php nedir, kullanım alanları nelerdir?
  • Nesne yönelimli programlamaya yüzeysel bakış
  • cURL nedir, nerelerde kullanılır?
  • Detaylı cURL kullanımı
  • Örnek Bot yazımı

Bot oluşturmanın gerektirdiği sebepler ve kullanım amacı

Öncelikle bot nedir, buna değinelim. Bot'u robot kelimesinin kısaltılmış hali olarak düşünebilirsiniz. Botlar, gerçek kullanıcıların yaptığı veya yapmadığı işleri otomatik olarak yapmak için tasarlanan yazılımlardır. Örneğin bir arama moturu için botlar bel kemiğidir, google'da herhangi bir arama yaptığınızda google'ın tasarladığı bu botların ziyaret ettiği sitelere göre sonuçlar görürsünüz. Botlar illa internete bağlı işlemler yapmak zorunda değildir, internete bağlı olan veya olmayan bir program içinde bot yazılabilir. Herşeyden önce botlar, çalışan bir programın yazılımıyla iletişim kurabilmek için bir protokol kullanmak zorundalardır. Bu protokoller birden fazla ağın veya cihazın birbiriyle iletişim kurmasını sağlar ve kullanım alanlarına göre farklılıklar gösterirler. Örneğin bir çağrı merkezine bağlandığınız zaman ve müşteri temsilcisine ulaşmak istediğinizde sizin yaptığınız arama ve bu arama içersinde gerçekleştirdiğiniz tuşlamalar da bir protokol kullanır (pbx). Bu aramada yarı otomatik bir işlem gerçekleştiren bir bot olarak kendinizi düşünebilirsiniz, ihtiyacınıza göre telefona komut verir ve yanıt alırsınız. Böyle uzak bir örnek vermemim sebebi, ufkunuzu genişletmek, olaylara farklı açılardan bakmanızı sağlamak. Gelelim bot oluşturmanın gerekliliğine, neden bot oluşturulur? Botlar normal kullanıcıların yapacağı işlerin zorluğunu veya yükünü azaltmak amacıyla kullanılır. Google'ı ele alalım, bütün internet adreslerini kendi veritabanına kaydetmesi için bir çalışan tutmak zorunda kalsaydı ne olurdu sizce? evet bu iş bitmezdi. Bu yüzden kullanım amacı, insanların yapmakta zorlanacağı işleri hem daha kolay hem de daha hızlı hale getirmektir.​
Bir bot oluşturmak için gereken mantıksal ilişkiyi fikren anlama

Genel olarak benim gördüğüm insanların sosyal medya üzerine bot oluşturmaya çalıştıkları yönünde. Bu yüzden bu anlatımı size instagram üzerinden örneklendirmeye çalışacağım. Hoş instagram dahil, sosyal medya da son 7 yıldır hiç şahsi olarak hesap kullanmadım, bu yüzden yanlış benzetmelerim olursa, bilginiz olsun bireysel kullanımım yok. Örneğin takip ettiğiniz biri var ve yeni paylaşım yapıp yapmadığını kontrol etmek istiyorsunuz. Bunun için önce uygulamayı indirmeniz gerekir, sonrasında kimliğinizi doğrulayarak giriş yapmanız, daha sonrasında kişi aratıp takip etmeniz, takip ettikten sonra profiline girip içeriğini kontrol etmeniz. Niye böyle bir çocuğa anlatır gibi anlattın demeyin, evet bunları hepiniz biliyorsunuz ve önemsiz detaylar bunlar. Peki ya bot kullanımı için, ya bunları herkes biliyor, önemsiz detay kardeşim bunlar yapamıyorsan bırak, deseler? Şimdi, bir insanın basitçe instagramı kullanmasından yola çıkarak, bir botun nasıl davranması gerektiğini analiz edelim. İnsanın başlamak için neye ihtiyacı vardı? Uygulamayı (instagram'ı) indirip çalıştırmaya. Bir bot da aynı şekilde bir programın indirilip kurulmasına ihtiyaç duyabilir, buradaki program çalışma ortamının kendisidir; yani o uygulamaya bağlanmak için bir çalışma ortamına ihtiyaç duyar. Python kullanıyorsanız bu terminal olabilir, C dilleri için visual studio olabilir, sunucu dilleri için sunucu işletim sistemleri olabilir. Çalışma ortamını hazırladıktan sonra ise, nasıl ki siz instagramda kullanıcı adı ve şifrenizi doğrulyarak oturum açıyorsanız, bir botta bir internet sitesine bağlanmaya çalıştığı esnada oturum doğrulaması gerekebilir veya nasıl ki açık profilleri uygulamaya giriş yapmadan görebiliyorsanız, bir botta oturum doğrulaması olmaksızın etkileşime geçebilir. ancak sizin etkileşim için nasıl ki kısıtlı imkanlarınız varsa (oturum açmadan hikaye paylaşıp dm'yi kullanamıyorsanız) botta aynı şekilde kısıtlanmış bir erişime sahip olabilir. Bunları bir çocuğa anlatır gibi anlatıyorum evet, çünkü sorulan sorular, açılan konular bu seviyeye indirdi beni. ilerleyen maddelerde, bu betimlemeleri teorik olarak teknik terimler ile değiştireceğim, bu yüzden o terimleri ve anlatımı anlamanız için burada zemin hazırlıyorum. Kısaca bir bot, öncelikle bir çalışma ortamına ihtiyaç duyar, daha sonrasında bağlandığı ağın özelliklerine ve yanıtlarına göre, işlem gerçekleştirebilmesi için kendi kimliğini doğrulaması gerekebilir, katı kuralları yoksa kısıtlı işlemleri kimliğini doğrulamadan yapabilir. bu işlemler tıpkı sizin yaptığınız sorgulamalar gibi program diline has bir sorgulama içerir ve sunucuya iletildiği zaman, sizin aldığınız arama sonuçları gibi yanıtlanarak istek sonuçlandırılır. daha sonrasında bu isteği işleyip işlememe konusunda karar verir, örneğin çıkan arama sonuçlarında sizin birini takip etmeniz veya etmemeniz gibi mantıksal kararlardır bunlar.​
Bot oluşturmak için gerekenler

Bir programlama dili bilmek​
Kullanacağınız iletişim protokolünü hakkında bilginiz olması​
Kullanacağınız dili çalıştırmanızı sağlayacak bir çalışma ortamı​
Regex algoritmasına hakim olmak (duruma göre değişir)​
PHP nedir, kullanım alanları nelerdir?

bu konuda detaylı bir anlatım yapmayacağım, bu tarz konularla ilgileniyorsanız zaten az çok fikriniz bulunuyordu. PHP internet için üretilmiş ve internet sitelerinin barındığı cihazlarda (sunucuda) sitenin davranışlarını programlayan veya doğrudan sunucuda gerçekleşen işlemleri programlayan bir dildir. PHP, bazı (amatör) yazarlarının bilmediği imkanlarda sunar, gömülü (mikro çipler) sistemleri programlamak veya GTK ile masaüstü programları yazabilmek gibi.

Nesne yönelimli programlamaya yüzeysel bakış

Bunu aslında bir kod yazma prensibine benzetebilirsiniz ve bu madde de vereceğim bilgiler kesinlikle yetersiz ve konuya ufak bir değinmedir sadece. Bu yüzden bu konu üzerine araştırmanızı önemle tavsiye ederim. bu konuda bilgi vermem için, örnek kodlamalar yapmam gereceğinden wikipedia'dan alıntı yapıyorum;​
"1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutları sürekli artıyor, ancak belli bir nitelik düzeyi korumak için gereken bakımın maliyeti zaman ve çaba olarak daha da hızlı artıyordu. NYP'yi bu soruna karşı bir çözüm haline getiren başlıca özelliği, yazılımda birimselliği (modularity) benimsemesidir. NYP ayrıca, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır. Sağladığı bu avantajlardan dolayı, NYP günümüzde geniş çaplı yazılım projelerinde yaygın olarak kullanılmaktadır."

cURL nedir, nerelerde kullanılır?

cURL, libcurl kütüphanesi içerisinde bulunan ve veri alışverişi sağlamak maksadıyla iletişim protokollerini kullanan bir yazılımdır. Kullanım alanları saymak, kullanımı olmayan alanları saymaktan daha zordur. Standart bir kullanıcının bildiği bütün işletim sistemlerinde çalıştırılabilir ve 50'e yakın program dili cURL'u destekler. kullanımını aşağıdaki detaylı olarak anlatacağım, yinede daha detaylı bilgi almak isteyenler internette cURL için araştırma yapabilirler.​

Detaylı cURL kullanımı

Kullanımına geçmeden önce, nasıl kullanılır sorunu sormakta fayda var. Bunun için ekstra bir program kurmanız gerekmiyor. benim anla işletim sistemim windows olmasına rağmen, ben linux'un bash komutları üzerinden anlatmayı tercih ediyorum. Windows ile hemen hemen aynı kullanıma sahip olsalar da, ufak sözdizimi farklılıkları bulunmaktadır. Ancak temel istek ikisinde aynıdır. Yukarıda protokollerden bahsetmiştik, herhangi bir protokol belirtmediğimiz için standart olarak HTTP yani internet protokolünü kullanmış oluyoruz, ayrıca bağlantı önünce // kısmında aslında protokol de belirtmiş oluruz örneğin https://.​
temel örnek​
Bash:
curl "https://www.turkhackteam.org"
burada curl ile turkhackteam.org sitesine bağlanmak için https protokolü üzerinden bir istekte bulunduk, ancak bu istekteki yanıt herhangi bir derleme veya yorumlanma yapılmadığı için bize kaynak olarak gelmiş oldu. yani tarayıcının bize görsel olarak sunduğu, tıkladığımız yazdığımız ekranın görsel olmayan halini HTML dili olarak verdi.​
Curl ile veri gönderme​
bunun için --data ifadesini kullanırız, kısa hali -d olarak geçer ikiside aynı komutu çalıştırır​
Bash:
curl https://www.turkhackteam.org
    -d "search=curl+nedir"
yukarıdaki kullanım en temel veri gönderme yöntemidir. bu yönteme belirli methodlar eklemeniz için --request veya kısaca -X kullanabilirsiniz. x büyük olmalı, küçük olan proxy ve benzeri görevlerde rol oynuyor. örneğin bu istek bir get değeri olsaydı data olarak belirtmemize gerek kalmazdı, ancak sunucu özellikle bunun post değeri olduğunun belirtilmesini isteyebilir. o zamanda bu kullanım aklımızda kalsın, ama aşağıdakini tercih edelim

Bash:
curl -X POST https://www.turkhackteam.org
    -d "search=curl+nedir" \
    -d "theme=dark" \
-X değerini yukarıda açıklamıştım, gelelim POST olayına, buralara kadar geldiyseniz formda veri göndermek için kullanılan bir method olduğunu zaten biliyorsunuz. peki neden ters slash koydum? normal kullanımı bu şekildedir, ancak siz tersh slash kullanmasanı da çalışacaktır. birdeb fazla -d yazmak şart mıydı peki? hayır değil, okunabilirliği kolaylaştırdığı için birden fazla -d koydum, normalde tek değer içerisinde bunu yapabilirdiniz, o zaman parametreleri ayrıştırmak için & operatörüne ihtiyaç duyardınız, yani şöyle;

Bash:
curl -X POST https://www.turkhackteam.org
    -d "search=curl+nedir&theme=dark"
bir sunucuya böyle bir istekte bulunduk, ancak beklediğimiz gibi yanıt alamadık. bunun sebebi gönderdiğimiz veriyi her ne kadar parametre olarak belirtmiş olsakta, sunucu başlığı içersinde bu olay için herhangi bir açıklama yapmamamız olabilir. bu yüzden bu kullanımda aklınızda kalsın ama aşağıdakini tercih etmeye çalışın,​
Bash:
curl -X POST https://www.turkhackteam.org
    -H "Content-Type: application/x-www-form-urlencoded"
    -d "search=curl+nedir&theme=dark"

-h sunucuya, sunucu ham olarak HTTP protokolü içerisinde bilgi vermek için kullanılır uzun hali --header biz kısaca -h olarak belirttik. diyelim ki biz bu isteklerimizi bir dosya olarak kaydetmek istiyoruz. o zaman -o değerini kullanmamız gerekiyor, yanılmıyorsam uzun hali --out veya --output olmalı. yani çıktı değer demek. bu değerin önüne yazdıklarınız dosya adını tanımlar, ancak bağlandığınız sunucu dosya için bir isim belirlediyse, o dosyayı indirirken belirttiğiniz isim değerini yok sayar böyle durumlar için -O şeklinde doğrudan da kullanabilirsiniz. büyük O uzak sunucudaki adıyla kaydeder.

Bash:
curl -o "THT.html" "https://www.turkhackteam.org"
veya
Bash:
curl -O "https://www.turkhackteam.org"
sonuç;
41ll3it.jpg

yoruldum yahu. son olarak proxy kullanımına değineceğim curl için. az miktarda komuta değindiğimin farkındayım, ancak ben detaylıdan kasıt olarak anlatım ve mantık üzerine detaydan bahsettim, tüm methodları yazacağım anlamına gelmez bu, ki komutların sonunda sizler için basit ipuçlarını da vereceğim. neyse. proxy kullanımına geçmeden önce, proxy için kullanılan socks protokolünden bahsetmek istiyorum, temel olarak ikiye (socks4 ve socks5) ayrılırlar ve yaptıkları işin bakımından bir fark yoktur. sadece socks5 isteğe kullanıcı şifre özelliği sunar. ancak ücretsiz kullanımlarda ve kişisel adresiniz değilse socks4'ü tercih etmenizi tavsiye ederim, daha güvensiz ve sağlayıcılarının çok olması sebebiyle daha hızlıdırlar. socks5'i ücretsiz sunan az firma vardır ve bu yüzden sunulan ağı sock4 kullanan bir proxy'e göre daha çok yoruyorlar ve oturum doğrulama gibi aksaklıklar yaşatabiliyorlar. evet proxy kullanımına geçelim​
Bash:
curl -x 125.213.194.26:5678 https://turkhackteam.org
qjyckwf.jpg

hata almama sevindim. gördüğünüz gibi ilk belirttiğim proxy adresi kullanım dışı olduğu için, iki kere denedikten sonra yeni bir adres ile tekrar denedim bu kez farklı bir hata aldım. bu kullanımındaki her şeyi daha önceden anlatmıştım sadece size farklı gelecek tek şey bir takım sayılar :) birde bu sefer x'in küçük olmasına dikkat etmişsinizdir, ilk istekte büyük ile küçük arasındaki farkı açıklamıştım. bu sayılar ise proxy hizmetini sağlayan sunucunun ip adresleri iki nokta üst üsteden sonraki kısımda yani : bundan sonraki kısımda ip adresinin port'u. resimde gördüğünüz gibi istek zaman aşımına uğradı, peki niye? site bu lokasyondan bağlantı kabul etmiyor olabilir veya lokasyon farkından dolayı istek normalden uzun sürüyor olabilir. peki bunun için ne yapılabilir? zaman aşımı için süreyi yeniden ayarlayabiliriz ama bundan önce, bir komut için harcanan süreyi ayarlamayı göstermek istiyorum. bunun için -m ifadesini kullanacağınız uzun hali --max-time birleşik.

Bash:
curl -m 15 -x 125.213.194.26:5678 https://turkhackteam.org
sanırımkonuya resim ekleme hakkım dolmuş, hata alıyorum. neyse.
gördüğünüz gibi komutun çalışmasını saniye cinsinden 15 olarak belirttim. bana dönen sonuçta ise 15015 mili saniyeden sonra istek zaman aşımına uğradığı söyledi. yani burada ne olmuş oldu, ben curl'a dedim ki "hacı bu komutu 15 saniye kadar çalıştırabilirsin" şimdi ne diyeceğim peki? zaman aşımını 30 saniye olarak belirle. peki komut çalışma süresi 15 saniye ve zaman aşımı süresi 30 saniye olursa ne olur? 15 saniye içersin de yanıt alamazsam, 15 saniyelik çalışma süresi dolmuş olacağından benim ayarladığımı 30 saniyelik zaman aşımı süresinin bir hükmü kalmaz. dolayısıyla komut çalışma süresi ile zaman aşımı sürelerini anlatma ihtiyacı duydum, daha sonra çok kafanızı karıştırabilirdi bu durum. şimdi sadece zaman aşımına müdahale edeceğim komutun çalışması için bir sınır tanımı olmayacak. bu sefer kullanacağımız komut --connect-timeout benim bildiğim kısa karşılığı yok.

Bash:
curl --connect-timeout 30 -x 125.213.194.26:5678 https://turkhackteam.org
yukarıda gördüğünüz gibi zaman aşımı süresini 30 saniye yaptım. 0 yapsaydım zaman aşımını kapatmış olurdum, yinede yanıt alamazsa zaman aşımına uğrar bir hata alırdı, kapanmış olması mutlak istek göndereceği anlamına gelmez. bu arada binary yani iki sistemde yapılan ayarlar 0 veya 1 şeklindedir, 0 false değeri taşır ve bir ayarı kapatır, 1 true değeri taşır ve özelliği aktif hale getirir veya açar. bu true ve false olayıda boolean olarak geçer. neyse. eğer burada proxy protkolü belirtmek isteseydim, --socks4 , veya 4a veya 5 yazmam gerekirdi. eğer protokol belirtirsem, -x ifadesini kaldırmam gerekir.

Bash:
curl --socks4 125.213.194.26:5678 https://turkhackteam.org
peki socks5 kullansaydım ne olurdu? bu sefer oturumumu doğrulamak için parola belirtmek durumunda kalırdım bu durumda da : ifadesini kullanırdım, nasıl ki ip ile portu ayırıyorsa aynı şekilde kullanıcı adı ve şifresini ayırır. önce kullanıcı adı sonra şifre şeklinde. bu sefer kullanacağımız ifade -u küçük olanı genel geçer kullanım, kullanıcı adı ve şifre demek, proxy içinde kullanılabilir, ama proxy için olan kullanımı aslında büyük olanı -U

Bash:
curl -U THT:sifre --socks5 125.213.194.26:5678 https://turkhackteam.org
yukarıdaki örnek kullanımın diğerlerinden tek farkı basına -U geldikten sonra kullanici:sifre şeklinde değer girmeniz.
gelelim ufak ipuçlarına;
öncelikle ben hiç sıfırdan curl komutu yazmıyorum, örnek ve temel ayarları benim için yapması için aşağıdaki siteye url adresi giriyorum;
daha sonra bu kalıp üzerinden kodlamaya devam ediyorum. bunu sıfırdan kodlayamadan için değil, pratik olduğu için tercih ediyorum ve çeşitli dillere dönüştürme olanağı sağlıyor.

diğer bir ipucu ise tarayıcının geliştirmek amacıyla kullanılan denetim kısmı. orada mevcut sayfa için çeşitli dillerde yapılacak curl istekleri, header bilgileri ile doğrudan verilmekte. konuya artık resim ekleyemediğimden resmi link olarak aşağıya bırakıyorum.

farklı kullanımları ve komutları öğrenmek için
resmi sitesi: curl
geliştiriciler için ayrıntılı döküman sitesi: Introduction

Örnek bot yazımı

evet. örnek botu daha önce yazdığım çalışmalardan birinden kullanacağım. bu bot ne yapacak peki? bir pdf kitap sitesine bağlanarak, arama metnimize göre oradaki kitapları bize listeleyecek, daha sonrasında seçtiğimiz kitap için bize pdf versiyonunu okuma şansı verecek, bunun dışında pdf'i string değere dönüştürerek daha sonrasında javascript kullanımıyla seslendirecek. yani oraya yazacağımız komut ile, o kitabı bize bulacak, çevirecek ve okuyacak. bunu PHP ve javascript kullanarak yazmıştım, detaylı olarak anlatımını yapacağım. yalnız öncesinde bir saat falan dinlenmek istiyorum. zaten konuda karakter sınırlaması var, 5k karakterden sonra ikinci post'a geçmem gerekiyor. gece gibi konunun devamı gelir.
Güzel konu olmuş elinize 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.