MỤC LỤC
LỜI NÓI ĐẦU i
MỤC LỤC ii
MỤC LỤC HÌNH ẢNH iv
MỤC LỤC BẢNG BIỂU v
CHƯƠNG 1. GIỚI THIỆU VỀ HỆ THỐNG TÊN MIỀN DNS 1
1.1. TÊN MIỀN LÀ GÌ? 1
1.2. HỆ THỐNG TÊN MIỀN LÀ GÌ (DOMAIN NAME SYSTEM) 2
1.2.1. Lịch sử phát triển hệ thống tên miền 2
1.2.2. Mục đích của hệ thống tên miền (DNS) 2
1.3. CẤU TRÚC CỦA HỆ THỐNG TÊN MIỀN (DNS) 3
1.3.1. Cấu trúc cơ sở dữ liệu 3
1.3.2. Cấu trúc của tên miền 3
1.3.2.1. Cách đặt tên miền 3
1.3.2.2. Phân loại tên miền 3
1.3.2.3. Cấu trúc tên miền 4
1.3.3. Máy chủ quản lý tên miền (Domain name server-dns) 5
1.3.4. Các bản ghi thường có trong cơ sở dữ liệu của DNS server: 6
1.3.4.1. Bản ghi SOA (Start of Authority ) 6
1.3.4.2. Bản ghi kiểu A 6
1.3.4.3. Bản ghi CNAME 7
1.3.4.4. Bản ghi MX 7
1.3.4.5. Bản ghi NS 8
1.3.4.6. Bản ghi PTR 8
1.4. PHÂN LOẠI DNS SERVER VÀ ĐỒNG BỘ DỮ LIỆU GIỮA CÁC DNS SERVER 9
1.4.1. Phân loại DNS server 9
1.4.2. Đồng bộ dữ liệu giữa các DNS server( Zone transfer) 10
1.4.2.1. Các phương pháp đồng bộ dữ liệu giữa các DNS server 10
1.4.2.2. Cơ chế hoạt động đồng bộ dữ liệu giữa các DNS server 11
CHƯƠNG 2. LẬP TRÌNH MẠNG TRONG .NET FRAME WORK 13
2.1. SOCKET KHÔNG HƯỚNG KẾT NỐI (UDP SOCKET) 14
2.2. CÁC LỚP HỖ TRỢ ĐƯỢC XÂY DỰNG TỪ LỚP SOCKET 14
2.2.1. Lớp TCP Client: 14
2.2.2. Lớp TCPListener 15
2.2.3. Lớp UDP Client: 16
2.3. SOCKET KHÔNG ĐỒNG BỘ: 17
2.3.1. Sử dụng Socket không đồng bộ: 17
2.3.2. Sử dụng các phương thức Non-Blocking 18
2.3.3. Giao thức ICMP 19
2.3.3.1. Giới thiệu về giao thức ICMP 19
2.3.3.2. Khái niệm 22
CHƯƠNG 3. XÂY DỰNG CHƯƠNG TRÌNH 24
3.1. CÁCH THỨC HOẠT ĐỘNG . 24
3.1.1. Giới thiệu WHOIS 24
3.1.1.1. Lịch sử 24
3.1.1.2. Các giao thức WHOIS 25
3.1.2. Hoạt động của lệnh ping 26
3.2. VIẾT CHƯƠNG TRÌNH 28
3.2.1. WHOIS 28
3.2.2. PING 31
3.3. GIỚI THIỆU CHƯƠNG TRÌNH. 39
KẾT LUẬN 46
TÀI LIỆU THAM KHẢO 47
51 trang |
Chia sẻ: netpro | Lượt xem: 3064 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng chương trình tra cứu thông tin Domain, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
o biết các thông tin về tên miền quản lý, do đó yêu cầu có tối thiểu hai bản ghi NS cho mỗi tên miền.
Cú pháp của bản ghi NS
IN NS
Ví dụ:
Vnnic.net.vn IN NS dns1.vnnic.net.vn
Vnnic.net.vn IN NS dns2.vnnic.net.vn
Với khai báo trên, tên miền vnnic.net.vn sẽ do máy chủ tên miền có tên dns.vnnic.net.vn quản lý. Điều này có nghĩa, các bản ghi như A, CNAME, MX … của tên miền cấp dưới của nó sẽ được khai báo trên máy chủ dns1.vnnic.net.vn. và dns2.vnnic.net.vn.
Bản ghi PTR
Hệ thống DNS không những thực hiện việc chuyển đổi từ tên miền sang địa chỉ IP mà còn thực hiện chuyển đổi địa chỉ IP mà còn thực hiện chuyển đổi địa chỉ IP sang tên miền. Bản ghi PTR cho phép thực hiện chuyển đổi địa chỉ IP sang tên miền. Cú pháp của bản ghi PTR:
101.57.162.203.in-addr.arpa IN PTR www.vnnic.net.vn
Bản ghi PTR trên cho phép tìm tên miền www.vnnic.net.vn khi biết địa chỉ IP (203.162.57.101) mà tên miền trỏ tới.
PHÂN LOẠI DNS SERVER VÀ ĐỒNG BỘ DỮ LIỆU GIỮA CÁC DNS SERVER
Phân loại DNS server
Có ba loại DNS server sau:
Primary server
Nguồn xác thực thông tin chính thức cho các domain mà nó được phép quản lý.
Thông tin về tên miền do nó được phân cấp quản lý thì được lưu trữ tại đây và sau đó có thể được chuyển sang cho các secondary server.
Các tên miền do primary server quản lý thì được tạo và sửa đổi tai primary server và được cập nhật đến các secondary server.
Primary server nên đặt gần với các client để có thể phục vụ truy vấn tên miền một cách dễ dàng và nhanh hơn.
Secondary server:
DNS được khuyến nghị nên sử dụng ít nhất là hai DNS server để lưu cho mỗi một zone. Primary DNS server quản lý các zone và secondary server sử dụng để lưu trữ dự phòng cho primary server. Secondary DNS server được khuyến nghị dung nhưng không nhất thiết phải có. Secondary server được phép quản lý domain nhưng dữ liệu về tên miền (domain) ,nhưng secondary server không tạo ra các bản ghi về tên miền (domain) mà nó lấy về từ primary server.
Khi lượng truy vấn zone tăng cao tại primary server thì nó sẽ chuyển bớt tải sang cho secondary server .Hoặc khi primary server gặp sự cố không hoạt động được thì secondary server sẽ hoạt động thay thế cho đến khi primary server hoạt động trở lại.
Secondary server nên được đặt ở gần với primary server và client để có thể phục vụ cho việc truy vấn tên miền dễ dàng hơn. Nhưng không nên cài đặt secondary server trên cùng một mạng con (subnet) hoặc cùng một kết nối với primary server. Để khi primary server có kết nối bị hỏng thì cũng không có ảnh hưởng đến secondary server.
Primary server thường xuyên thay đổi hoặc thêm vào các zone mới. Nên DNS server sử dụng cơ chế cho phép secondary lấy thông tin từ primary server và lưu trữ nó. Có hai giải pháp lấy thông tin về các zone mới là lấy toàn bộ (full) hoặc chỉ lấy phần thay đổi (incremental)
Caching-only server:
Tất cả các DNS server đều có khả năng lưu trữ dữ liệu trên bộ nhớ cache của máy để trả lời truy vấn một cách nhanh chóng. Nhưng hê thống DNS còn có một loại Caching-only server.Loại này chỉ sử dụng cho việc truy vấn, lưu giữ câu trả lờ dựa trên thông tin có trên cache của máy và cho kết quả truy vấn. Chúng không hề quản lý một domain nào và thông tin mà nó chỉ giới hạn những gì được lưu trên cache của server.
Lúc ban đầu khi server bắt đầu chạy thì nó không lưu thông tin nào trong cache. Thông tin sẽ được cập nhật theo thời gian khi các client server truy vấn dịch vụ DNS. Nếu bạn sử dụng kết nối mạng WAN tốc độ thấp thì việc sử dụng caching-only DNS server là giải pháp hữu hiệu cho phép giảm lưu lượng thông tin truy vấn trên đường truyền.
Caching-only có khả năng trả lời các câu truy vấn đến client. Nhưng không chứa zone nào và cũng không có quyền quản lý bất kì domain nào. Nó sử dụng bộ cache của mình để lưu các truy vấn của DNS của client. Thông tin sẽ được lưu trong cache để trả lời các truy vấn đến client.
Đồng bộ dữ liệu giữa các DNS server( Zone transfer)
Các phương pháp đồng bộ dữ liệu giữa các DNS server
Do đề phòng rủi ro khi DNS server không hoạt động hoặc kết nối bị đứt người ta khuyên nên dùng hơn một DNS server để quản lý một zone nhằm tránh trục trặc đường truyền. Do vậy ta phải có cơ chể chuyển dữ liệu các zone và đồng bộ giữa các DNS server khác nhau. Có hai cách để đồng bộ dữ liệu giữa các DNS server là primary server và secondary server như : Truyền toàn bộ zone(all zone transfer) và truyền phần thay đổi (Incremental zone transfer)
Truyền toàn bộ zone (all zone transfer ): Khi một DNS server mới được thêm vào mạng thì nó được cấu hình như một secondary server mới cho một zone đã tồn tại. Nó sẽ tiến hành nhần toàn bộ dữ liệu từ primary server. Đối với các DNS server phiên bản đầu tiên thường dùng giải pháp lấy toàn bộ các cơ sở dữ liệu khi có các thay đổi trong zone.
Truyền phần thay đổi(Incremental zone): Theo giải pháp này là chỉ truyền những những dữ liệu thay đổi của zone . Đồng bộ dữ liệu này được miêu tả chi tiết trong tiêu chuẩn RFC 1995. Nó cung cấp giải pháp hiệu quả cho việc đồng bộ những thay đổi, thêm, bớt của zone.
Cơ chế hoạt động đồng bộ dữ liệu giữa các DNS server
Với trao đổi IXFR zone thì sự khác nhau giữa số serial của nguồn dữ liệu và bản sao của nó. Nếu cả hai đều có cùng số serial thì việc truyền dữ liệu của zone sẽ không thực hiện.
Nếu số serial cho dữ liệu nguồn lớn hơn số serial của secondary server thì nó sẽ thực hiện gửi những thay đổi của bản ghi nguồn (Resource record – RR) của zone ở primary server.
Để truy vấn IXFR thực hiện thành công và các thay đổi được gửi thì tại DNS server nguồn của zone phải được lưu giữ các phần thay đổi để sử dụng truyền đến nơi yêu cầu của truy vấn IXFR. Incremental sẽ cho phép lưu lượng truyền dữ liệu ít và thực hiện nhanh hơn.
Zone transfer sẽ xảy ra khi có những hành động sau xảy ra:
Khi quá trình làm mới của zone đã kết thúc (refresh exprire )
Khi secondary server được thông báo zone đã thay đổi tại nguồn quản lý zone
Khi thêm mới secondary server
Tại secondary server yêu cầu chuyển zone
Các bước yêu cầu chuyển dữ liệu từ secondary server đến DNS server chứa zone để yêu cầu lấy dữ liệu về zone mà nó quản lý.
Khi cấu hình DNS server mới, thì nó sẽ gửi truy vấn yêu cầu gửi toàn bộ zone (all zone transfer request (AXFR) ) đến DNS server chính quản lý dữ liệu của zoneDNS server chính quản lý dữ liệu của zone trả lời và chuyển toàn bộ dữ liệu về zone cho secondary server (destination) mới cấu hình.
Để xác định có chuyển dữ liệu hay không thì nó dựa vào số serial được khai báo bằng bản ghi SOA.
Khi thời gian làm mới (refresh interval ) của zone đã hết, thì DNS server nhận dữ liệu sẽ truy vấn yêu cầu làm mới zone tới DNS server chính chứa dữ liệu zone.
DNS server chính quản lý dữ liệu sẽ trả lời truy vấn và gửi lại dữ liệu. Trả lời truy vấn dữ liệu gồm số serial của zone tại DNS server chính.
DNS server nhận dữ liệu về zone và sẽ kiểm tra số serial trong trả lời và quyết định xem có cần truyền dữ liệu không.
Nếu giá trị của số serial của Primary Server bằng với số serial lưu tại nó thì sẽ kết thúc luôn. Và nó sẽ thiết lập lại với các thông số cũ lưu trong máy.
Nếu giá trị của số serial tại Primary Server lớn hơn giá trị serial hiện tại DNS nhận dữ liệu. Thì nó kết luận zone cần được cập nhật và cần đồng bộ dữ liệu giữa hai DNS server
Nếu DNS server nhận kết luận rằng zone cần phải lấy dữ liệu thì nó sẽ gửi yêu cầu IXFR tới DNS server chính để yêu cầu truyền dữ liệu của zone.
DNS server chính sẽ trả lời với việc gửi những thay đổi của zone hoặc toàn bộ zone
Nếu DNS server chính có hỗ trợ việc gửi những thay đổi của zone thì nó sẽ gửi những phần thay đổi của nó (Incremental zone transfer of the zone).
Nếu DNS server chính không hỗ trợ thì nó sẽ gửi toàn bộ zone (Full AXFR transfer of the zone )
LẬP TRÌNH MẠNG TRONG .NET FRAME WORK
Socket là một giao diện lập trình ứng dụng (API) mạng, thông qua giao diện này chúng ta có thể lập trình điều khiển việc truyền thông giữa hai máy sử dụng các giao thức mức thấp là UDP, TCP,…
Socket là sự trừu tượng hoá ở mức cao, có thể tưởng tượng nó như là thiết bị truyền thông hai chiều gửi – nhận dữ liệu giữa hai máy tính với nhau
Các loại socket
Socket hướng kết nối (TCP Socket)
Socket không hướng kết nối (UDP Socket)
Raw Socket
Hình 2.1 Socket hướng kết nối (TCP Socket)
Đặc điểm:
Có một đường kết nối ảo giữa hai tiến trình.
Một trong hai tiến trình phải đợi tiến trình kia yêu cầu kết nối.
Có thể sử dụng để liên lạc theo mô hình Client/Server.
Trong mô hình Client/Server thì Server lắng nghe và chấp nhận một yêu cầu kết nối.
Mỗi thông điệp gửi đều có xác nhận trở về.
Các gói tin chuyển đi tuần tự.
SOCKET KHÔNG HƯỚNG KẾT NỐI (UDP SOCKET)
Đặc điểm:
Hai tiến trình liên lạc với nhau không kết nối trực tiếp.
Thông điệp gửi đi phải kèm theo địa chỉ của người nhận.
Thông điệp có thể gửi nhiều lần.
Người gửi không chắc chắn thông điệp tới tay người nhận.
Thông điệp gửi sau có thể đến đích trước thông điệp gửi trước đó.
CÁC LỚP HỖ TRỢ ĐƯỢC XÂY DỰNG TỪ LỚP SOCKET
Lớp TCP Client:
Để đảm bảo độ tin cậy trong các ứng dụng mạng, người ta còn dùng một giao thức khác, gọi là giao thức có kết nối: TCP (Transport Control Protocol). Trên Internet chủ yếu là dùng loại giao thức này, ví dụ như Telnet, HTTP, SMTP, POP3,… để lập trình theo giao thức TCP, MS.NET cung cấp hai lớp có tên là TCPClient và TCPListener.
Các thành phần của TCP Client
- Phương thức khởi tạo
Bảng 2.1 Các phương thức khởi tạo
- Một số thuộc tính:
Bảng 2.2 Một số thuộc tính
- Một số phương thức:
Bảng 2.3 Một số phương thức
Lớp TCPListener
TCPListener là một lớp cho phép người lập trình có thể xây dựng các ứng dụng Server (ví dụ như SMTP server, FTP server, DNS server, POP3 server hay server tự định nghĩa …). Ứng dụng server khác với ứng dụng Client ở chỗ nó luôn luôn thực hiện lắng nghe và chấp nhận các kết nối đến từ Client.
Các thành phần của lớp TcpListener:
Phương thức khởi tạo:
Bảng 2.4 + Phương thức khởi tạo TcpListener
Các phương thức khác:
Bảng 2.5 Các phương thức khởi tạo TcpListener khác
Lớp UDP Client:
Giao thức UDP (User Datagram Protocol hay User Define Protocol) là một giao thức phi kết nối (connectionless) có nghĩa là một bên có thể gửi dữ liệu cho bên kia mà không cần biết là bên đó đã sẵn sang hay chưa? (nói cách khác là không cần thiết lập kết nói giữa hai bên khi tiến hành trao đổi thông tin). Giao thức này không tin cậy bằng giao thức TCP nhưng tốc độ lại nhanh và để cài đặt. Ngoài ra, với giao thức UDP ta còn có thể gửi các gói tin quảng bá (Broadcast) cho đồng thời nhiều máy.
Trong .NET, lớp UDPClient đóng gói các chức năng của giao thức UDP.
Bảng 2.6 Các phương thức của lớp UDP Client
SOCKET KHÔNG ĐỒNG BỘ:
Sử dụng Socket không đồng bộ:
Để lập trình không đồng bộ với Socket chúng ta sử dụng các phương thức cho việc sử dụng bất đồng bộ.
Các phương thức cho việc lập trình bất đồng bộ được chia làm 2 loại, thương bắt đầu bằng Begin và End:
Phương thức bắt đầu bằng Begin, bắt đầu một chức năng và được đăng ký với phương thức AsyncCallback
Bắt đầu bằng End chỉ chức năng hoàn thành khi AsyncCallback được gọi.
Để chấp nhận kết nối bất đồng bộ ta sử dụng phương thức BeginAccept() và EndAccept(), như sau:
IAsyncResult BeginAccept(AsyncCallback callback, object state)
Socket EndAccept(IAsyncResult iar);
Để thiết lập kết nối theo cách bất đồng bộ chúng ta sử dụng phương thức BeginConnect() và EndConnect().
Để gửi dữ liệu bất đồng bộ dùng phương thức BeginSend() và EndSend()
Để nhận dữ liệu với giao thức hướng kết nối dùng phương thức BeginReceive() và EndReceive()
Để nhận dữ liệu bất đồng bộ với giao thức không hướng kết nối dùng phương thức BeginReceiveFrom() and EndReceiveFrom()
Sử dụng các phương thức Non-Blocking
Để lập trình bất đồng bộ chúng ta có thể sử dụng các phương thức Non-blocking như phương thức Poll() và phương thức select:
Phương thức Poll(): bool Poll(int microseconds, SelectMode mode);
SelectRead: Poll() trả về true nếu một trong những điều kiện sau được thoả
Nếu phương thức Accept() thành công
Nếu có dữ liệu trên socket
Nếu kết nối đã đóng
SelectWrite: Poll() trả về true nếu thoã một trong những điều kiện sau:
Phương thức Connect() thành công
Nếu có dữ liệu trên Socket để gửi
SelectError: Poll() trả về true nếu một trong những điều kiện sau được thoả:
Nếu phương thức Connect() thất bại
Nếu có dữ liệu ngoài băng thông chuẩn gửi đến nhưng thuộc tính OutOfBandInline không được thiết lập là true.
Phương thức Select(): Socket.Select(IList checkRead, IList check Write, IList check Error, int microseconds)
2.2 Giao thức ICMP và lệnh PING
Giao thức ICMP
Giới thiệu về giao thức ICMP
Thuật ngữ ICMP được viết tắt bởi Internetwork Control Message Protocol là một giao thức hoạt động trên layer 2 - Internetwork trong mô hình TCP/IP hoặc layer 3 - Network trong mô hình OSI cho phép kiểm tra và xác định lỗi của Layer 3 Internetwork trong mô hình TCP/IP bằng cách định nghĩa ra các loại thông điệp có thể sử dụng để xác định xem mạng hiện tại có thể truyền được gói tin hay không. Trong thực tế, ICMP cần các thành phần của mọi gói tin IP để có thể hoạt động được.
Thỉnh thoảng một gateway hoặc một máy đích sẽ liên lạc với máy nguồn để đưa ra những thông điệp lỗi về tiến trình xử lý các gói tin. Đó là mục đích chính của giao thức này. ICMP sử dụng với một mục đích đơn giản là hỗ trợ cho sự hoạt động của giao thức IP.
Trong khi truyền các gói tin Ping, cũng được biết đến như các gói tin ICMP echo requests, và ICMP echo replies. ICMP bao gồm rất nhiều các loại thông điệp khác nhau cho những mục đích đa dạng khác nhau.
Bảng 2.7 Các loại thông điệp quan trọng và thường sử dụng
Mỗi thông điệp của ICMP có chứa một trường Type và một trường Code. Trường Type là trường biểu diễn các loại thông điệp còn trường Code chứa các thông điệp con (subtype). Cho ví dụ, có nhiều người cho rằng có hai loại thông điệp được đưa ra khi sử dụng câu lệnh Ping như: ICMP Echo Request và ICMP echo Reply, nhưng thực tế, hai loại thông điệp đó thuộc cùng một loại thông điệp là Echo và khác Code (Request và Reply). Các loại thông điệp của ICMP như sau:
ICMP Unreachable: Khi một thiết bị thực hiện việc truyền một gói tin đến máy đích nhưng không thực hiện được thì thiết bị đó sẽ gửi lại một thông điệp là ICMP Unreachable. Để trợ giúp cho việc xác định nguyên nhân chính của việc gói tin đó không thể gửi được, thì thông điệp ICMP Unreachable sẽ bao gồm một trọng năm giá trị Code để biểu diễn nguyên nhân việc truyền dữ liệu không thành công. Cho ví dụ: trong hình sau máy VNE_1 đang cố gắng kết nối đến Web server, Web server này được gọi là Web.
Hình 2.2 Ví dụ về gởi nhận ICMP
Bảng 2.8 Những loại Code của thông điệp ICMP Unreachable
Time Exceeded ICMP Message: Thông điệp ICMP Time Exceeded đưa ra thông báo cho một máy nguồn khi một gói tin mà nó gửi bị huỷ bỏ bởi vì thời gian truyền gói tin quá dài. Khi truyền dữ liệu trên mạng thì các gói tin truyền cần phải được định nghĩa thời gian truyền, để ngăn cản việc gói tin đó được truyền mãi sẽ gây ra lặp vòng, mỗi một gói tin đều có một IP header trong đó có một trường được gọi là TTL (Time to Live) - trường này sẽ định nghĩa ra một giá trị hop (tức là số router) mà gói tin có thể đi qua. Khi gói tin đi qua một router thì giá trị trường TTL này sẽ được giảm đi 1, cứ như vậy cho đến khi nào gói tin đó bị router giảm giá trị trường TTL xuống giá trị 0 thì gói tin đó sẽ bị huỷ và router thực hiện việc huỷ gói tin đó sẽ gửi một thông điệp ICMP Time Exceeded cho máy nguồn.
ICMP Redirect: Thông điệp ICMP Redirect cho phép một router gateway nói cho một máy nào đó biết về một router tốt hơn có thể được sử dụng trong quá trình truyền dữ liệu đến một máy đích nào đó. Để có thể thực hiện được điều đó, một ICMP Redirect sẽ được gửi từ router gateway đến máy đó và nói cho máy đó biết về địa chỉ IP về router tốt hơn kia.
2.2.1.2 Cấu trúc bản tin ICMP
Bản tin ICMP được mang trong phần dữ liệu của gói tin IP. Mặcdù mỗi bản tin ICMP có dạng riêng của nó, nhưng chúng đều bắt đầu với ba trường sau:
Bảng 2.9 Cấu trúc bản tin ICMP
Type
Code
Checksum
Messeage
Hình :
Type (8bit): Là một số nguyên 8bit để xác định thông điệp.
Code (8bit): Cung cấp thêm thông tin về kiểu thông điệp.
Checksum(16bit) : ICMP sử dụng thuật giải checksum như IP, nhưng ICMP checksum chỉ tính đến thông điệp ICMP.
Các thông điệp ICMP thông báo lỗi luôn luôn bao gồm phần đầu và 64bit đầu tiên của packet gây nên lỗi. Lý do có thêm phần đầu này cùng với phần đầu packet là để cho phép nơi nhận xác định chính xác hơn những giao thức nào và chương trình ứng dụng có trách nhiệm đối với packet.
2.2.2 Lệnh PING
Khái niệm
Ping, viết tắt của Packet Internet Grouper (Groper), là một công cụ cho mạng máy tính sử dụng trên các mạng TCP/IP (chẳng hạn như Internet) để kiểm tra xem có thể kết nối tới một máy chủ cụ thể nào đó hay không, và ước lượng khoảng thời gian trễ trọn vòng để gửi gói dữ liệu cũng như tỉ lệ các gói dữ liệu có thể bị mất giữa hai máy. Công cụ này thực hiện nhiệm vụ trên bằng cách gửi một số gói tin ICMP đến máy kia và lắng nghe trả lời.
XÂY DỰNG CHƯƠNG TRÌNH
CÁCH THỨC HOẠT ĐỘNG .
Giới thiệu WHOIS
Chương trình WHOIS giúp cho quản trị viên hệ thống để có thể lấy được thông tin về địa chỉ IP hoặc tên miền mà mình quản trị. Việc sử dụng hệ thống WHOIS đã phát triển thành nhiều loại mục đích khác nhau.
Hỗ trợ an ninh và sự ổn định của Internet bằng cách cung cấp các điểm liên hệ với các nhà khai thác mạng và các quản trị viên, bao gồm cả các ISP, và máy tính xác nhận các đội ứng phó sự cố.
Xác định tình trạng đăng ký tên miền.
Hỗ trợ các cơ quan thực thi pháp luật trong điều tra cho thực thi pháp luật quốc gia và quốc tế, bao gồm, ví dụ, chống khủng bố liên quan đến tội phạm hình sự và trong việc hỗ trợ các thủ tục hợp tác quốc tế. Ở một số nước, các tổ chức phi chính phủ chuyên ngành có thể tham gia vào công tác này;
Hỗ trợ trong việc chống lạm dụng sử dụng công nghệ thông tin truyền thông;
Tạo điều kiện để giúp chống xâm phạm, lạm dụng và trộm cắp sở hữu trí tuệ tên miền theo quy định của pháp luật nhà nước các điều ước quốc tế;
Đóng góp cho sự tự tin của người dùng trong Internet như một phương tiện đáng tin cậy và hiệu quả thông tin và truyền thông và là một công cụ quan trọng để thúc đẩy thương mại điện tử bằng cách giúp người dùng xác định người hoặc tổ chức chịu trách nhiệm về nội dung và dịch vụ trực tuyến
Hỗ trợ các doanh nghiệp, các tổ chức khác và người sử dụng trong cuộc chiến chống gian lận, tuân thủ pháp luật liên quan và bảo vệ lợi ích của công chúng.
Lịch sử
Khi Internet đã xuất hiện trong các mạng ARPANET , chỉ có một tổ chức mà xử lý tất cả các đăng ký tên miền, đó là DARPA . Quy trình đăng ký được thành lập trong RFC 920. WHOIS được tiêu chuẩn hoá đầu những năm 1980 để phục vụ cho lĩnh vực liên quan đến đăng ký tên miền. Vì đăng ký tất cả đã được thực hiện bởi một tổ chức trong thời gian đó, một máy chủ trung tâm đã được sử dụng cho các truy vấn WHOIS. Tìm kiếm này lên làm như vậy thông tin rất dễ dàng.
Đến năm 2005, đã có rất nhiều nhà cung cấp dịch vụ mạng so với những năm 1980. Điều này đã dẫn đến một mạng lưới phức tạp của các đăng ký tên miền và các hiệp hội đăng ký, đặc biệt là quản lý của cơ sở hạ tầng Internet mà đã trở nên quốc tế. Như vậy, thực hiện một truy vấn WHOIS trở nên hết sức cần thiết. vWHOIS trở nên rất phổ biến với người dùng Internet hiện nay.
Các giao thức WHOIS
Các giao thức WHOIS có nguồn trong giao thức ARPANET NICNAME và dựa trên giao thức NAME/FINGER, được mô tả trong RFC 742 (1977). NICNAME/WHOIS lần đầu tiên được mô tả trong RFC 812 vào năm 1982 bởi Ken Harrenstien của Trung tâm Mạng lưới thông tin SRI International .
WHOIS ban đầu được thực hiện trên chương trình điều khiển mạng (NCP), nhưng hàng sử dụng chính của nó khi TCP/IP được chuẩn hoá trên toàn bộ các ARPANET và sau đó là mạng Internet.
Đặc tả quá trình WHOIS
Kết nối với các máy chủ dịch vụ
TCP: dịch vụ cảng 43 thập phân
NCP: ICP sang thập phân 43 socket, thành lập hai kết nối 8-bit
Gửi một "dòng lệnh" duy nhất, kết thúc với .
Nhận được thông tin để đáp ứng với các dòng lệnh. Các
server đóng kết nối của nó ngay sau khi sản lượng
hoàn thành.
Hiện tại, dịch vụ WHOIS thường được truyền đi bằng cách sử dụng Transmission Control Protocol (TCP). Các Server lắng nghe các yêu cầu trên được biết đến cổng 43. Client là các ứng dụng đơn giản mà thiết lập một kênh thông tin liên lạc đến máy chủ, truyền tải một hồ sơ văn bản với tên Domain hoặc IP để được truy vấn .Có thể để truy vấn một máy chủ WHOIS bằng cách sử dụng giao thức Telnet.
Referral Whois (RWhois) là một mở rộng của giao thức Whois. RWhois mở rộng các khái niệm về Whois như khả năng mở rộng nhờ thiết kế phân cấp, có khả năng tạo ra một hệ thống với kiến trúc hình cây. Truy vấn được chuyển đến máy chủ WHOIS qua nhiều node khác nhau.
Các chuẩn của WHOIS được miên tả trong các RFC
RFC 812 – NICNAME/WHOIS (1982, đã cũ)
RFC 954 – NICNAME/WHOIS (1985, đã cũ)
RFC 3912 – WHOIS protocol specification (2004, hiện tại đang sử dụng)
Hình 3.1 Cách thức hoạt động của Whois
Chương trình hoạt động dựa vào mạng internet, đầu tiên client sẽ gửi yêu cầu đến máy chủ whois, sau đó máy chủ này sẽ tìm kiếm trong cơ sở dữ liệu của mình xem có thông tin được yêu cầu hay không, nếu có thì máy chủ sẽ gửi trả thông tin được yêu cầu về cho client, nếu không thì máy chủ này sẽ gửi yêu cầu của client đến các máy chủ khác trên mạng internet, sau đó khi nhận được thông tin trả về từ các máy chủ khác thì máy chủ whois sẽ gửi trả yêu cầu về cho client.
Hoạt động của lệnh ping
Hình 3.2Ví dụ về Ping
- Nếu nhận được thông báo "Host Alive", điều này có nghĩa là host không còn hoạt động.
- Ping gởi một ICMP message "echo request" đến host. Nếu nhận được một ICMP message "echo reply" của host, ping sẽ thông báo host còn hoạt động. Nếu không nhận được ICMP message "echo reply" của host, ping sẽ thông báo host này đã ngừng hoạt động!
- định dạng của ICMP "echo request" và "echo reply" có dạng như sau:
Bất cứ lúc nào host nhận được một ICMP request message, nó sẽ phản hồi trở lại với một identifier và số sequence number. Trong hầu hết các hệ thống Unix, trường indentifier được đặt số Process ID của tiến trình gởi gói packet đi. Vì vậy, nếu ping cùng một lúc nhiều lần đến một hệ thống Unix, giá trị indentifier nhận được trong mỗi lần ping sẽ khác nhau.
Trường sequence number có giá trị mặc định là 0. Giá trị này sẽ được tăng một sau mỗi lần hệ thống phản hồi ICMP request message của chương trình ping. Ping sẽ in ra giá trị sequence number của mỗi lần nhận packet, điều này cho chúng ta biết được các gói packet có gặp lỗi hay không.
VIẾT CHƯƠNG TRÌNH
Để viết được chương trình với các chức năng trên yêu cầu trước hết là phải nắm được lý thuyết về mạng máy tính (DNS, giao thức ICMP, gói PING) ngôn ngữ lập trình C# và kỹ thuật lập trình socket.
WHOIS
Chương trình sử dụng hai thư viện của hệ thống.
using System.Net.Sockets;
using System.IO;
Sử dụng một đối tượng TcpClient để kết nối đến máy chủ, network streams cho giao tiếp giữa Server và Client, stream readers và writers đảm nhiệm gởi dữ liệu đi và nhận dữ liệu về. Vì vậy cần khai báo:
TcpClient tcpc;
BufferedStream bfwhois;
NetworkStream nswhois;
StreamWriter swgoi;
StreamReader swnhan;
Đồng thời khai báo hai server WHOIS, một server cho truy vấn thông tin tên miền và một IP cho truy vấn thông tin Domain
//khai bao whois server lay thong tin domain
string whoisserverdm = "whois.internic.net";
//khai bao whois server lay thong tin ve ip
string whoisserverip = "whois-servers.net";
Phần code còn lại sẽ được đặt trong sự kiện của button.
Bắt đầu tạo mới TCP Client với thông số tên của WHOIS server đã khai báo, tạo mới Netword stream và gởi yêu cầu đến WHOIS server
//bắt đầu
// Nếu combobox chọn WHOIS (index=1) thì thực hiện
if (cbb_select.SelectedIndex == 0)
{
try
{
//Tạo mới TCP client với thông số Server WHOIS domain đã khai báo
tcpc = new TcpClient(whoisserverdm.ToString(), 43);
//tạo mới networkstream
nswhois = tcpc.GetStream();
//tạo mới và cài đặt buffer
bfwhois = new BufferedStream(nswhois);
swgoi = new StreamWriter(bfwhois);
//goi yêu cầu lấy thông tin DOMAIN đến WHOIS server
swgoi.WriteLine(txt_ip.Text);
swgoi.Flush();
}
catch
{
MessageBox.Show("Không thể kết nối tới máy chủ \r\n Vui lòng kiểm tra kết nối!");
}
//xóa txt_respont để chứa dữ liệu mới
txt_respont.Clear();
try
{
//tạo mới stream nhận dữ liệu từ who is server
swnhan = new StreamReader(bfwhois);
// tạo mảng thongtinnhan để chứa thông tin domain
}
catch
{
MessageBox.Show("Không thể kết nối tới máy chủ \r\n Vui lòng kiểm tra kết nối!");
}
}
Ghi kết quả nhận được từ WHOIS server vào mảng.
string[] mang1 = new string[1024];
int i = 0;
string thongtinnhan1;
try
{
while ((thongtinnhan1 = swnhan.ReadLine()) != null)
{
mang1[i] = thongtinnhan1;
i = i + 1;
}
//đóng TCP client
tcpc.Close();
Tương tự, lấy thông tin của IP bằng cách gởi IP đến WHOIS server.
// Tương