Server HTTP isteğini nasıl analiz eder(?)

Napcaz

Katılımcı Üye
28 Nis 2019
771
2
778
Cudi
Hocalarım selam, herkese iyi forumlar kafamı baya karıştıran bir mevzuda size danışmaya karar verdim.
Mevzu şudurki python yardımıyla aşağıdaki gibi bir HTTP server inşa ettim olabildiğince basit şekilde:
Kod:
[COLOR=#d4d4d4][FONT=Consolas][COLOR=#c586c0]import[/COLOR][COLOR=#d4d4d4] socket[/COLOR]

[COLOR=#d4d4d4]HOST = [/COLOR][COLOR=#ce9178]"192.168.1.41"[/COLOR]
[COLOR=#d4d4d4]PORT = [/COLOR][COLOR=#b5cea8]80[/COLOR]

[COLOR=#d4d4d4]s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) [/COLOR]
[COLOR=#d4d4d4]s.bind((HOST, PORT))[/COLOR]

[COLOR=#d4d4d4]http_response = [/COLOR][COLOR=#ce9178]"HTTP/1.1 200 OK[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#ce9178]Server: Sems Server[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#ce9178]Connection: Close[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#ce9178]Content-Type: text/html[/COLOR][COLOR=#d7ba7d]\n\n[/COLOR][COLOR=#ce9178]Selam Birader"[/COLOR]

[COLOR=#d4d4d4]s.listen([/COLOR][COLOR=#b5cea8]2[/COLOR][COLOR=#d4d4d4])[/COLOR]
[COLOR=#d4d4d4]conn, addr = s.accept()[/COLOR]
[COLOR=#c586c0]while[/COLOR][COLOR=#569cd6]True[/COLOR][COLOR=#d4d4d4]:[/COLOR]
[COLOR=#d4d4d4]    request = conn.recv([/COLOR][COLOR=#b5cea8]1024[/COLOR][COLOR=#d4d4d4])[/COLOR]
[COLOR=#c586c0]if[/COLOR][COLOR=#d4d4d4] request:[/COLOR]
[COLOR=#dcdcaa]print[/COLOR][COLOR=#d4d4d4](request.decode())[/COLOR]
[COLOR=#d4d4d4]        conn.send(http_response.encode())[/COLOR]
[COLOR=#d4d4d4]        conn.close()[/COLOR]
[COLOR=#c586c0]break[/COLOR]
[/FONT][/COLOR]
şimdi bu şekilde ben local ağda yukardaki ip yi girdiğimde webe Selam Birader yazısı önüme çıkıyor yani server çalışıyor.
Şimdi bu akışı kendi yazdığım client ile yapmayı deniyeceğim oda aşağıda bıraktığım kodlara sahip:

Kod:
[COLOR=#d4d4d4][FONT=Consolas][COLOR=#c586c0]import[/COLOR][COLOR=#d4d4d4] socket[/COLOR]

[COLOR=#d4d4d4]HOST = [/COLOR][COLOR=#ce9178]"192.168.1.41"[/COLOR]
[COLOR=#d4d4d4]PORT = [/COLOR][COLOR=#b5cea8]80[/COLOR]

[COLOR=#d4d4d4]s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) [/COLOR]
[COLOR=#d4d4d4]s.connect((HOST, PORT))[/COLOR]

[COLOR=#d4d4d4]data = [/COLOR][COLOR=#ce9178]"lol=lol"[/COLOR]
[COLOR=#d4d4d4]user_agent = [/COLOR][COLOR=#ce9178]"user-agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"[/COLOR]
[COLOR=#d4d4d4]Content_Lenght = [/COLOR][COLOR=#569cd6]f[/COLOR][COLOR=#ce9178]"Content-Length: [/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#4ec9b0]str[/COLOR][COLOR=#d4d4d4]([/COLOR][COLOR=#dcdcaa]len[/COLOR][COLOR=#d4d4d4](data))[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#ce9178]"[/COLOR]
[COLOR=#d4d4d4]Connection = [/COLOR][COLOR=#ce9178]"Connection: Close"[/COLOR]
[COLOR=#d4d4d4]Content_Type = [/COLOR][COLOR=#ce9178]"application/x-www-form-urlencoded"[/COLOR]

[COLOR=#d4d4d4]request = [/COLOR][COLOR=#569cd6]f[/COLOR][COLOR=#ce9178]"POST / HTTP/1.1[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#ce9178]Host: [/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#d4d4d4]HOST[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#ce9178]:[/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#d4d4d4]PORT[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#d4d4d4]Connection[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#d4d4d4]user_agent[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#d4d4d4]Content_Type[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#d7ba7d]\n[/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#d4d4d4]Content_Lenght[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#d7ba7d]\n\n[/COLOR][COLOR=#569cd6]{[/COLOR][COLOR=#d4d4d4]data[/COLOR][COLOR=#569cd6]}[/COLOR][COLOR=#ce9178]"[/COLOR]
[COLOR=#d4d4d4]s.send(request.encode())[/COLOR]


[/FONT][/COLOR]
Bu Client ile de gayet sorunsuz çalışıyor Client e gelen response:
HTTP/1.1 200 OK
Server: Sems Server
Connection: Close
Content-Type: text/html

Selam Birader


Server a gelen istek de:
POST / HTTP/1.1
Host: 192.168.1.41:80
Connection: Close
user-agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
application/x-www-form-urlencoded
Content-Length: 7

lol=lol


Tamam hocalar şimdi diceksiniz ki e oğlum ne istiyorsun her şey tam çalışıyor mükemmel..
Hocalarım benim algılıyamadığım sorun bu Server a POST metodu ile istek yollarken gönderdiğim lol=lol payloadu varya, heh işte onu ben nasıl Serverda işlicem yani bana bu paramatreleri gönderdin sana şunu atıyım tarzında gelen POST requestinin payload kısmını analiz eden bir kod yazmam lazım, yani bütün web sayfaları böyle nede olsa login e doğru kullanıcı ismini ve şifreyi gönderirsin Serverda sana sayfayı atar, sistem böyle işliyor ama bu noktada tıkandım soruyu özetlemek gerekirse:

"Clientin Servara gönderdiği paremetreleri Servar tarafınca algılanmasını sağlamak için nasıl bir yapı kurmam lazım"


Cevaplarınızı sabırsızlıkla bekliyorum, lütfen beni merakta bırakmayın tekrardan herkese iyi forumlar iyi günler dilerim efenim..:bilgili:sırıtan:):
 
Son düzenleme:

ihan3t

Kadim Üye
7 Şub 2012
5,018
27
HTTP standartlarını araştırmanı tavsiye ederim. Bunun için RFC ye bakabilirsin. Requestler belirli bir structure'a sahip olur. Servera gelen header değerlerine göre body i işleyebilirisn.

Hobi/öğrenme amaçlı yapılabilir üzerinde çalıştığın işlem ama günümüzde onlarca gelişmiş http server implementasyonu varken sıfırdan http server yazmak çok mantıklı değil. Desteklemen gereken tonla özellik var.

Örnek almak açısından, mevcut frameworklerin http server implementasyonlarına bakabilirsin.
 

Napcaz

Katılımcı Üye
28 Nis 2019
771
2
778
Cudi
HTTP standartlarını araştırmanı tavsiye ederim. Bunun için RFC ye bakabilirsin. Requestler belirli bir structure'a sahip olur. Servera gelen header değerlerine göre body i işleyebilirisn.

Hobi/öğrenme amaçlı yapılabilir üzerinde çalıştığın işlem ama günümüzde onlarca gelişmiş http server implementasyonu varken sıfırdan http server yazmak çok mantıklı değil. Desteklemen gereken tonla özellik var.

Örnek almak açısından, mevcut frameworklerin http server implementasyonlarına bakabilirsin.

Hocam açıkçası çorbaya bilmediğim malzeme katmama konusunda çok katıyım ama böyle de devam edilmiyeceğinin bilincindeyim. O yüzden bu konu bazında, benim kullanmaktan rahatsızlık duymayacağım, çok gelişmiş olmıyan, ne olup bittiğini takip etmekten zorlanmıyacağım varsa bir modül veyahut framework önerirsiniz çok sevinirim tabi python dili çerçevesinde olması lazım. d
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
27
Hocam açıkçası çorbaya bilmediğim malzeme katmama konusunda çok katıyım ama böyle de devam edilmiyeceğinin bilincindeyim. O yüzden bu konu bazında, benim kullanmaktan rahatsızlık duymayacağım, çok gelişmiş olmıyan, ne olup bittiğini takip etmekten zorlanmıyacağım varsa bir modül veyahut framework önerirsiniz çok sevinirim tabi python dili çerçevesinde olması lazım. d

SimpleHTTPServer implementasyonuna bakabilirsin. Flask vs bakabilirsin.
 
Ü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.