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
- Host: GitHub
- URL: https://github.com/themusharraf/dns-server
- Owner: themusharraf
- Created: 2024-10-22T06:51:38.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-10-24T09:03:41.000Z (8 months ago)
- Last Synced: 2025-02-09T09:29:08.556Z (4 months ago)
- Topics: dns, dns-server, python3, soket-io, udp
- Language: Python
- Homepage:
- Size: 1.95 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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.