An open API service indexing awesome lists of open source software.

https://github.com/themusharraf/dns-server

DNS - bu domen nomlarini IP manzillarga hal qilish uchun ishlatiladigan protokol. Ushbu vazifada biz asosiy DNS so'rovlariga javob beradigan DNS serverini yaratamiz
https://github.com/themusharraf/dns-server

dns dns-server python3 soket-io udp

Last synced: 2 months ago
JSON representation

DNS - bu domen nomlarini IP manzillarga hal qilish uchun ishlatiladigan protokol. Ushbu vazifada biz asosiy DNS so'rovlariga javob beradigan DNS serverini yaratamiz

Awesome Lists containing this project

README

        

Ushbu kod UDP (User Datagram Protocol) soket orqali tarmoqda ma'lumot almashish imkonini beruvchi dastur. Ushbu dastur, IP manzili va port raqami bilan bog'langan soketni yaratadi va ma'lumotlarni olish hamda javob berish bilan shug‘ullanadi.

Quyida batafsil tushuntirish:

### 1. Import qilish:

```python
import socket
```
`socket` moduli soket orqali tarmoqda ma'lumot almashish imkonini beradi. Bu yerda soket UDP orqali ishlatiladi.

### 2. Asosiy funksiya `main`:

```python

def main():
print("Logs from your program will appear here!")
```
Bu yerda asosiy funksiya boshlangan va `print` yordamida loglar chop qilinmoqda. Bu loglar sizning testlaringiz yoki dastur ishlashi paytida ko'rish uchun foydali.

### 3. UDP soket yaratish va uni bog'lash:

```python
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("127.0.0.1", 2053))
```
`socket.AF_INET`: Bu IPv4 protokolida ishlatiladigan tarmoq oilasini bildiradi (IP manzil).
`socket.SOCK_DGRAM`: Bu UDP protokolini anglatadi. UDP orqali ma'lumotlar "datagram" shaklida yuboriladi, ya'ni ular o'z-o'zicha mustaqil bo'ladi.
`bind`: Soketni o'z IP manzili va porti bilan bog'lash. Bu yerda IP manzil "127.0.0.1" (localhost) va port raqami 2053.

### 4. UDP orqali ma'lumotlarni olish va javob yuborish:
```python
while True:
try:
buf, source = udp_socket.recvfrom(512)
response = b""
udp_socket.sendto(response, source)
except Exception as e:
print(f"Error receiving data: {e}")
break
```
`recvfrom(512)`: Bu soket orqali kelayotgan ma'lumotlarni qabul qiladi, bu yerda 512 baytgacha ma'lumot olinishi mumkin. `buf` olingan ma'lumotni o'zida saqlaydi, `source` esa ma'lumot yuborilgan manzilni saqlaydi (IP manzili va port).
`sendto(response, source)`: Bu qabul qilingan manzilga` (source)` javob `(response)` yuboradi. Bu yerda `response` bo'sh bo‘lib, hech qanday ma'lumot qaytarilmayapti.
`except Exception as e`: Agar biror xato yuz bersa, dasturning ishlashi to‘xtatiladi va xato haqida ma'lumot chop qilinadi.

### 5. Natija: Dastur UDP orqali kelgan ma'lumotni qabul qiladi, ammo bu dasturning hozirgi versiyasi hech qanday javob bermayapti (bo'sh `respons`e yuborilyapti). Agar kerak bo'lsa, siz bu yerda turli xil javoblarni ishlab chiqishingiz mumkin.

Dastur faqat lokal (localhost) tarmoqda ishlaydi, chunki u `"127.0.0.1"` IP manzilida bog'langan va faqatgina `2053-port` orqali ma'lumotlarni qabul qiladi.