Python / Socket Modülü

2 Nis 2019
1,653
10
3
Geçmişten...
GyUig8.gif

Merhabalar arkadaşlar bugün sizlere elimden geldiği kadar socket modülünü anlatmaya çalışacağım....

Konu Başlıkları;
>>Socket modülü nedir?
>>Socket tipi kaça ayrılır?
>>Socket methodları ve açıklamaları.
>>Küçük bir örnek gösterim.

bGn47Z.png


Socket Modülü Nedir?
Socket modülü, istemci ve sunucu programları dahil olmak üzere tam teşekküllü ağ uygulamaları oluşturmak için çeşitli nesneler, sabitler, işlevler ve ilgili istisnalar sağlar.

xM25x8.png


Örnek bir socket nesnesi için gerekli olan parametreler aşağıdaki gibidir.

s=socket.socket(socket_family, socket_type, protocol=0)

xM25x8.png


Socket family 2 ye ayrılmaktadır:

socket_family ;

1) AF_UNIX (UNIX ile aynı hostta veri aktarımı için) (linux)

2) AF_INET (INET internet üzerinden veri aktarımı için) (genel)

xM25x8.png


Socket type 2 ye ayrılmaktadır:

socket_type;

1) SOCK_STREAM (TCP veri aktarımı için)

2) SOCK_DGRAM (UDP veri aktarımı için)

xM25x8.png


Protokol standartta 0 olarak kullanılabilir.

protocol = 0 (default)


bGn47Z.png


SOCKET METHODLARI VE AÇIKLAMALARI;

>> s.socket()

>> s.bind()

>> s.listen()

>> s.accept()

>> s.connect()

>> s.recv()

>> s.send()

>> s.recvfrom()

>> s.sendto()

>> s.close()

>> socket.gethostname()

bGn47Z.png

AÇIKLAMALARI;

>>> s.socket(family, type, [protocol])

Socket yaratmak için kullanılır...

Family parametresi socketin hangi alan için yaratıldığını belirtir. Genel kullanılanlar ise Unix alanı için (AF_UNIX) internet alanı için AF_INET dir.

Type parametresi ile kullanılacak protokol tipi belirlenir. TCP için SOCK_STREAM, UDP için SOCK_DGRAM kullanılır. Diğer geçerli seçenekler ise SOCK_RAW, SOCK_SEQPACKET ve SOCK_RDM kullanılır.

1.png


>>> s.bind()

Socketi bir adrese bağlamak için kullanılır,bind() metodu parametre olarak socketin bağlanacağı adres ve port numarasından oluşan (host, port) şeklinde kullanılır.

Kod:
s.bind(("192.168.1.90,1234))

1.png


>>> s.listen

Beğlantı dinlemek için kullanılır,parametre olarak kaç bağlantının kabul edileceğini alır. En az 1 olamalıdır.


Kod:
  s.listen(2)


1.png



>>> s.accept()

Bağlantıları kabul etmek için kullanılır,bu method bağlantı gelince gelen pasif kabul edilen bağlantıyı dahi kabul eder ve bağlantı gelinceye kadar sürekli bekler.

1.png



>>> s.connect()

Sockete bağlanmak için bu method kullanılır...

Kod:
s.connect(("192.168.1.97", 1234))

1.png



>>> s.recv()

Bu method TCP mesajı alır.

1.png


>>> s.send()

Bu method TCP mesajını iletir.

1.png


>>> s.recvfrom()

Bu method UDP mesajını alır.

1.png


>>> s.sendto()

Bu method UDP mesajını iletir.

1.png


>>> s.close()

Bu method socketi kapatır.

1.png


>>> s.gethostname()

Bu method Ana bilgisayar adını gösterir/döndürür.

bGn47Z.png


Küçük Bir Örnek Gösterim:

Kod:
#Basit bir server yazdık :)


import socket

host = socket.gethostname()#Local Cihazımızı Çağıralım...
port = 12345

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#Socketimizi oluşturalım...
    print("socket oluşturuldu")

    s.bind((host, port))#bind metodu ile host ve portu bildiriyoruz.
    print("Socket {} nolu porta bağlandı".format(port))

    s.listen(5)# client üzerinden gelecek bağlantıyı bekliyoruz....    
    print("Socket Dinleniyor...")
except socket.error as bildirim:
    print("Hata:",bildirim)

while True: 

   # Client ile bağlantı kurulursa 
   c, addr = s.accept()#Gelen  istekleri kabul eden methodu çağırdık....      
   print('Gelen bağlantı:', addr)

   # Bağlanan client a mesaj gönderelim.  
   mesaj = 'Bağlantı Başarılı :)'
   c.send(mesaj.encode('utf-8')) 

   # Bağlantıyı sonlandıralım 
   c.close()
https://paste.ubuntu.com/p/rrqxGgwgn4/
 
Son düzenleme:

Qgenays

Katılımcı Üye
20 Haz 2020
254
3
Los Santos
Kardeşim emeğine sağlık. Bir kaç önerim var. Mesela socket modeli nedir diye başlık attın ya altına güzel bir görsel olabilirdi yazı stili ve boyutu değiştirilebilirdi( sadece önerimdir kişisel algılama) onun dışında konu sağlam konu emeğine sağlık tekrardan.
 
2 Nis 2019
1,653
10
3
Geçmişten...
Kardeşim emeğine sağlık. Bir kaç önerim var. Mesela socket modeli nedir diye başlık attın ya altına güzel bir görsel olabilirdi yazı stili ve boyutu değiştirilebilirdi( sadece önerimdir kişisel algılama) onun dışında konu sağlam konu emeğine sağlık tekrardan.
Teşekkür ederim her öneri benim için değerlidir :))
Eline sağlık leziz bir bilgi :))
Teşekkür ederim :))
 

Egec

Üye
19 May 2021
236
1
67
GyUig8.gif




Merhabalar arkadaşlar bugün sizlere elimden geldiği kadar socket modülünü anlatmaya çalışacağım....



Konu Başlıkları;

>>Socket modülü nedir?

>>Socket tipi kaça ayrılır?

>>Socket methodları ve açıklamaları.

>>Küçük bir örnek gösterim.



bGn47Z.png




Socket Modülü Nedir?


Socket modülü, istemci ve sunucu programları dahil olmak üzere tam teşekküllü ağ uygulamaları oluşturmak için çeşitli nesneler, sabitler, işlevler ve ilgili istisnalar sağlar.



xM25x8.png




Örnek bir socket nesnesi için gerekli olan parametreler aşağıdaki gibidir.



s=socket.socket(socket_family, socket_type, protocol=0)



xM25x8.png




Socket family 2 ye ayrılmaktadır:



socket_family ;



1) AF_UNIX (UNIX ile aynı hostta veri aktarımı için) (linux)



2) AF_INET (INET internet üzerinden veri aktarımı için) (genel)



xM25x8.png




Socket type 2 ye ayrılmaktadır:



socket_type;



1) SOCK_STREAM (TCP veri aktarımı için)



2) SOCK_DGRAM (UDP veri aktarımı için)



xM25x8.png




Protokol standartta 0 olarak kullanılabilir.



protocol = 0 (default)





bGn47Z.png




SOCKET METHODLARI VE AÇIKLAMALARI;




>> s.socket()



>> s.bind()



>> s.listen()



>> s.accept()



>> s.connect()



>> s.recv()



>> s.send()



>> s.recvfrom()



>> s.sendto()



>> s.close()



>> socket.gethostname()



bGn47Z.png


AÇIKLAMALARI;




>>> s.socket(family, type, [protocol])



Socket yaratmak için kullanılır...



Family parametresi socketin hangi alan için yaratıldığını belirtir. Genel kullanılanlar ise Unix alanı için (AF_UNIX) internet alanı için AF_INET dir.



Type parametresi ile kullanılacak protokol tipi belirlenir. TCP için SOCK_STREAM, UDP için SOCK_DGRAM kullanılır. Diğer geçerli seçenekler ise SOCK_RAW, SOCK_SEQPACKET ve SOCK_RDM kullanılır.



1.png




>>> s.bind()




Socketi bir adrese bağlamak için kullanılır,bind() metodu parametre olarak socketin bağlanacağı adres ve port numarasından oluşan (host, port) şeklinde kullanılır.



Kod:
s.bind(("192.168.1.90,1234))[/SIZE][/FONT][/COLOR][/CENTER]
[COLOR=White][FONT=Courier New][SIZE=5]
[CENTER]




1.png




>>> s.listen




Beğlantı dinlemek için kullanılır,parametre olarak kaç bağlantının kabul edileceğini alır. En az 1 olamalıdır.





Kod:
  s.listen(2)[/SIZE][/FONT][/COLOR][/CENTER]
[COLOR=White][FONT=Courier New][SIZE=5]
[CENTER]






1.png






>>> s.accept()




Bağlantıları kabul etmek için kullanılır,bu method bağlantı gelince gelen pasif kabul edilen bağlantıyı dahi kabul eder ve bağlantı gelinceye kadar sürekli bekler.



1.png






>>> s.connect()




Sockete bağlanmak için bu method kullanılır...



Kod:
s.connect(("192.168.1.97", 1234))[/SIZE][/FONT][/COLOR][/CENTER]
[COLOR=White][FONT=Courier New][SIZE=5]
[CENTER]




1.png






>>> s.recv()




Bu method TCP mesajı alır.



1.png




>>> s.send()




Bu method TCP mesajını iletir.



1.png




>>> s.recvfrom()




Bu method UDP mesajını alır.



1.png




>>> s.sendto()




Bu method UDP mesajını iletir.



1.png




>>> s.close()




Bu method socketi kapatır.



1.png




>>> s.gethostname()




Bu method Ana bilgisayar adını gösterir/döndürür.



bGn47Z.png




Küçük Bir Örnek Gösterim:



Kod:
#Basit bir server yazdık :)[/SIZE][/FONT][/COLOR][/CENTER]
[COLOR=White][FONT=Courier New][SIZE=5]
[CENTER]



import socket



host = socket.gethostname()#Local Cihazımızı Çağıralım...

port = 12345



try:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#Socketimizi oluşturalım...

    print("socket oluşturuldu")



    s.bind((host, port))#bind metodu ile host ve portu bildiriyoruz.

    print("Socket {} nolu porta bağlandı".format(port))



    s.listen(5)# client üzerinden gelecek bağlantıyı bekliyoruz....    

    print("Socket Dinleniyor...")

except socket.error as bildirim:

    print("Hata:",bildirim)



while True: 



   # Client ile bağlantı kurulursa 

   c, addr = s.accept()#Gelen  istekleri kabul eden methodu çağırdık....      

   print('Gelen bağlantı:', addr)



   # Bağlanan client a mesaj gönderelim.  

   mesaj = 'Bağlantı Başarılı :)'

   c.send(mesaj.encode('utf-8')) 



   # Bağlantıyı sonlandıralım 

   c.close()


Cok işime yaradı sağolun fakat c.send(mesaj.encode('utf-8')) kısmını anlamadım mesajı neden encode ediyoruz? ve utf8 işlevi nedir?
 
Ü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.