Đồ án chương trình mô tả hoạt động hệ thống phân giải tên miền domain name system

26 514 0
Đồ án chương trình mô tả hoạt động hệ thống phân giải tên miền domain name system

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đồ án chương trình mô tả hoạt động hệ thống phân giải tên miền domain name system

Trường Đại Học Kĩ thuật Công Nghệ TP HCM Khoa Cơng Nghệ Thơng Tin BÁO CÁO ĐỒ ÁN CHƯƠNG TRÌNH MÔ TẢ HOẠT ĐỘNG HỆ THỐNG PHÂN GIẢI TÊN MIỀN DOMAIN NAME SYSTEM – DNS Chương 1: Giới thiệu Chương 2: Domain Name System Chương 3: Sơ đồ hoạt động Chương 4: Code cụ thể chương trình DNS client chương trình DNS server Nhóm sinh viên thực : Sinh viên: Nguyễn An Cương Mã số sinh viên: 0851020008 Sinh viên: Trần Minh Tân Mã số sinh viên: 0851020179 Sinh viên: Nguyễn Văn Thành Mã số sinh viên: 0851020187 Trang Mục lục Chương 1: Giới thiệu Chương 2: Domain Name System (DNS) 2.1 Khái Niệm DNS: 2.2 Chức DNS 2.3 Các thành phần DNS 2.4 Nguyên tắc hoạt động chương trình : 2.4.1 Mô hình nguyên tắt hoạt động: Chương 3: Sơ đồ hoạt động 3.1 Sơ đồ hoạt động DNS server 3.2 Sơ đồ hoạt động DNS client Chương 4: Code cụ thể chương trình DNS client chương trình DNS server 4.1 Chương trình DNS client: 4.2 Chương trình DNS server: gồm có lớp: lớp Connection, lớp Main, lớp ServerThreadDns, lớp ResolveDNS: 13 4.2.1 Lớp dùng để kết nối tới sở liệu: 13 4.2.2 Lớp Main: lớp chương trình: 14 4.2.3 Lớp ServerThreadDns: lớp xem cần phân giải IP hay phân giải Domain: 16 4.2.4 Lớp ResolveDNS: lớp phân giải IP hay Domain , cập nhật liệu vào sở liệu: 18 Trang Chương 1: Giới thiệu Mỗi máy tính mạng muốn liên lạc hay trao đổi thơng tin, liệu cho cần phải biết rõ địa IP Nếu số lượng máy tính mạng nhiều việc nhớ IP khó khăn Mỗi máy tính ngồi địa IP cịn có tên máy (host name) Đối với người việc nhớ tên máy dễ nhớ địa IP chúng có tính trực quang gợi nhớ Do người ta tìm cách ánh xạ địa IP thành tên máy Vì dịch vụ DNS đời, người thiết kế cấu trúc dịch vụ DNS Paul Mockapetris – USC’s Information Sciences Institute kiến nghị RFC DNS RFC 882 883, sau RFC 1034 1035 với số RFC bổ xung bảo mật hệ thống DNS, cập nhật record DNS Hệ thống phân giải tên miền có vai trị quan trọng mơi trường mạng Bởi khơng có hệ thống phân giải tên miền mạng Internet mau chóng “ chết ”, lý người không nhớ hết địa ip website mà họ muốn truy cập, mà người dễ nhớ địa ip tên website , tức tên miền website Giả sử địa ip website www.abcdef.com 123.123.123.123 Trong trường hợp khơng có hệ thống phân giải tên miền người dùng muốn truy cập vào website www.abcdef.com họ phải đánh địa ip 123.123.123.123 vào trình duyệt, người quản lý website di chuyển server website đến nơi khác họ có địa ip 11.11.11.11 cho website họ, lúc người dùng đánh địa ip 123.123.123.123 để truy cập vào www.abcdef.com được, họ phải đánh địa 11.11.11.11 truy cập trang www.abcedef.com Và liên tục di chuyển server website nhiều lần người dùng cảm thấy khơng thoải mái phải nhớ nhiều địa ip trang web, cảm thấy khó khăn lần truy cập vào website www.abcdef.com đánh địa ip nên trang web không thu hút khách hàng không tồn lâu Tương tự cho nhiều website khác dể dàng thấy khơng có nhiều lượt người truy cập vào website website tồn không thu hút khách hàng Dần dần khơng cịn truy cập vào website nào, khơng cịn website tồn tại, dịch khác mail, ftp… tương tự, “ chết ” Nhưng có hệ thống phân giải tên miền việc người dùng truy cập vào website dễ dàng, họ khơng cần biết địa ip website dù địa ip website thay đổi liên tục họ cần nhớ tên miền website, tương tự cho dịch vụ mail, ftp… Trang Chương 2: Domain Name System (DNS) 2.1 Khái Niệm DNS: DNS từ viết tắt Domain Name System, hệ thống tên miền phát minh vào năm 1984 cho Internet, hệ thống cho phép thiết lập tương ứng địa ip tên miền Hệ thống tên miền (DNS) hệ thống đặt tên theo thứ tự cho máy vi tính, dịch vụ, nguồn lực tham gia vào Internet Nó liên kết nhiều thơng tin đa dạng với tên miền gán cho người tham gia Quan trọng là, chuyển tên miền có ý nghĩa cho người vào số định danh (nhị phân), liên kết với trang thiết bị mạng cho mục đích định vị địa hóa thiết bị khắp giới Hệ thống tên miền giúp cho định tên miền cho nhóm người sử dụng Internet cách có ý nghĩa, độc lập với địa điểm người sử dụng Bởi điều này, World-Wide Web (www) siêu liên kết trao đổi thơng tin Internet trì ổn định cố định định tuyến dòng Internet thay đổi người tham gia sử dụng thiết bị di động Tên miền internet dễ nhớ địa IP 208.77.188.166 (IPv4) 2001: db8: 1f70:: 999: de8: 7648:6 e8 (IPv6) Hệ thống tên miền phân phối trách nhiệm gán tên miền lập đồ tên tới địa IP cách định rõ máy chủ có thẩm quyền cho tên miền Trên giới có khoảng 13 DNS root Server DNS root server quản lý tất tên miền Top level Các tên miền là: com, org, vn,.net, Khi có yêu cầu phân giải Domain Name thành địa IP, máy khách gửi yêu cầu tới DNS gần nhất(DNS ISP) DNS ISP kết nối tới DNS root Server để hỏi địa Domain Name DNS root Server vào Top Level Domain Name mà từ có hướng dẫn thích hợp nhằm chuyển hướng cho máy khách đến địa cần truy vấn Những máy chủ có tên thẩm quyền phân cơng chịu trách nhiệm tên miền riêng họ, định tên máy chủ khác độc quyền họ cho tên miền phụ Kỹ thuật thực chế phân phối DNS, chịu đựng lỗi, giúp tránh cần thiết cho trung tâm đơn lẻ để đăng kí tư vấn liên tục cập nhật Nhìn chung, hệ thống tên miền lưu trữ loại thông tin khác, chẳng hạn danh sách máy chủ email mà chấp nhận thư điện tử cho tên miền Internet Bằng cách cung cấp cho giới rộng lớn, phân phối từ khóa – sở dịch vụ đổi hướng , Hệ thống tên miền thành phần thiết yếu cho chức Internet Các định dạng khác thẻ RFID, mã số UPC, kí tự Quốc tế địa email tên máy chủ, loạt định dạng khác có khả sử dụng DNS 2.2 Chức DNS Mỗi Website có hostname (là tên miền) địa IP Địa IP gồm nhóm số cách dấu chấm(IPv4) Khi người dùng mở trình duyệt Web Trang nhập tên website, trình duyệt đến thẳng website mà khơng cần phải thông qua việc nhập địa IP trang web Quá trình "dịch" tên miền thành địa IP trình duyệt hiểu truy cập vào website công việc DNS server Các DNS trợ giúp qua lại với để dịch địa "IP" thành "hostname" ngược lại Vì người sử dụng cần nhớ tên, không cần phải nhớ địa IP 2.3 Các thành phần DNS Các thành phần DNS:  DNS Domain Name Space: DNS domain có tên Hệ thống DNS hệ thống có cấu trúc phân tầng có cấp bậc cụ thể Gốc domain (root domain) nằm cùng, sau ký hiệu dấu "." bao gồm 13 máy chủ gốc Internet giới, tiếp đến Top-Layer, bao gồm tên miền com, vn, net tầng tên miền bao gồm từ đến ký tự, riêng tên miền ký tự dành riêng cho quốc gia Tiếp đến tầng Second-Level, tầng subdomains com.vn host name micrsosoft.com  Zones: vấn đề quan trọng khác DNS Zone Trong hệ thống DNS, người ta chia nhỏ thành phần để gán quản lý riêng,vì cần phải chia Zone để đảm bảo việc quản lý DNS cách dễ dàng - nói cách khác hệ thống tên miền chia phần nhỏ để dễ quản lý Zone Và thực tế liệu DNS chứa máy chủ Zone, liệu DNS liệu Zone Trong DNS tạo Zone có lựa chọn là:  Primary Zone: máy chủ chứa liệu Primary Zone máy chủ tồn quyền việc update liệu Zone  Secondary Zone: copy Primary Zone, chứa liệu Zone nên cung cấp khả phân giải cho máy có yêu cầu Muốn cập nhật liệu Zone phải đồng với máy chủ Primary  Stub Zone: liệu Stub Zone bao gồm liệu NS Record máy chủ Primary Zone mà thôi, với việc chứa liệu NS máy chủ Stub Zone có vai trò chuyển yêu cầu liệu Zone đến trực tiếp máy chủ có thẩm quyền Zone Trong Forward Lookup sử dụng để chuyển yêu cầu đến máy chủ có thẩm quyền Một điều quan trọng khác Stub Zone có khả chứa liệu NS Primary Zone nên có khả thơng minh trình cập nhật liệu, địa máy chủ NS Zone nên việc chuyển yêu cầu dễ dàng Trang Forward Lookup nhờ máy chủ phân giải tên hộ, tự động cập nhật liệu, lợi sử dụng Internet Còn Stub Zone sử dụng domain có nhiều Zone dành cho tổ chức truy cập vào liệu tổ chức  Name Servers: máy chủ chứa liệu Primary Zone 2.4 Nguyên tắc hoạt động chương trình : DNS Server hoạt động lắng nghe yêu cầu từ DNS Client cổng 123 Sau chấp nhận yêu cầu client, client server trao đổi thông tin port thống client server không trao đổi qua port 123 (port 123 nhầm khởi tạo kết nối) Khi muốn phân giải tên miền hay địa ip DNS Client gửi cho DNS Server chuổi kí tự cần phân giải, yêu cầu DNS Server phân giải Khi nhận chuỗi kí tự DNS Server kiểm tra chuỗi nhận địa ip hay domain, sau gọi hàm phân giải tương ứng với địa ip domain Khi gọi hàm phân giải chương trình dị tìm sở liệu có domain hay địa ip chưa , có lấy gửi kết cho DNS Client; ngược lại, chưa có sở liệu chương trình mạng Internet nhờ DNS Server khác phân giải hộ Trường hợp phân giải địa ip hay domain cập nhật vào sở liệu, sau chương trình truy vấn sở liệu lần để lấy địa ip hay domain gửi cho DNS Client Trường hợp khơng phân giải chương trình trả mã lổi 220 230 DNS Client nhận kết mã lổi xuất thơng báo tương ứng 220 : địa ip không tồn 230 : tên miền khơng tồn Trang 2.4.1 Mơ hình ngun tắc hoạt động: Trường hợp phân giải thành công Trường hơp 220 : địa ip không tồn Trường hợp 230 : tên miền không tồn Trang Trang Chương 3: Sơ đồ hoạt động 3.1 Sơ đồ hoạt động DNS server 3.2 Sơ đồ hoạt động DNS client Trang Chương 4: Code cụ thể chương trình DNS client chương trình DNS server 4.1 Chương trình DNS client: Trang Code chương trình: package baithiclient; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; public class FmClient extends javax.swing.JFrame { private Socket client=null; private PrintWriter out=null; private Scanner in=null; private String hienthi=null; public FmClient() { Trang 10 initComponents(); txtChuoi.requestFocus(); } @SuppressWarnings("unchecked") //phương thức nút Phân giải private void btnConectActionPerformed1(java.awt.event.ActionEvent evt) { String chuoi=this.txtChuoi.getText(); //chuỗi truyền lên server String diachi =this.txtdiahciserver.getText(); String ketqua=""; //chuỗi ghi nhận kết lấy từ server try { client = new Socket(diachi,123); // tạo socket kết nối tới server theo diachi port 123 out=new PrintWriter(client.getOutputStream(),true); //đóng gói chuỗi out.println(chuoi); //truyền chuỗi out.flush(); // xoá nhớ đệm in=new Scanner(client.getInputStream()); // nhận chuỗi truyền từ server ketqua=in.nextLine().trim(); if(ketqua.equals("220")) { //220 mã lỗi txtKetQua.setText("IP không tồn tại"); } else if(ketqua.equals("230")) { //230 mã lỗi txtKetQua.setText("Tên miền không tồn tại"); } else { String xuat=ThayTheKyTu(ketqua); txtKetQua.setText(xuat); } client.close(); //đóng kết nối } catch (Exception ee) { Trang 11 JOptionPane.showMessageDialog(null,"Không kết nối tới máy chủ"); } finally{ try { client.close(); } catch (IOException ex) { Logger.getLogger(FmClient.class.getName()).log(Level.SEVERE, null, ex); } } } // phương thức nút Thoát private void btnExitActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: System.exit(0); } //hàm thay public String ThayTheKyTu(String st) //thay khoảng trắng cách xuống dòng { String sTim = " "; String sThayThe = "\n"; st = st.replaceAll(sTim,sThayThe); return st; } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { Trang 12 new FmClient().setVisible(true); } }); } 4.2 Chương trình DNS server: gồm có lớp: lớp Connection, lớp Main, lớp ServerThreadDns, lớp ResolveDNS: 4.2.1 Lớp dùng để kết nối tới sở liệu: package Database; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class connection { private static Connection conn = null; private static String url = null; public connection() { } public static Connection getConnectionUrl() { String databaseName = ""; String serverName = ""; String portNumber = ""; String Instance = ""; String Password = ""; String Username = ""; try { FileInputStream fis = new FileInputStream("config.properties"); Properties pp = new Properties(); pp.load(fis); databaseName = pp.getProperty("databaseName"); serverName = pp.getProperty("serverName"); Trang 13 portNumber = pp.getProperty("portNumber"); Username = pp.getProperty("Username"); Password = pp.getProperty("Password"); Class.forName("com.mysql.jdbc.Driver"); url = "jdbc:mysql://"+serverName+"/"+databaseName+"?user="+Username+"&password="+P assword+""; conn = DriverManager.getConnection(url); if (conn!=null) { System.out.println(" Kết nối sở liệu thành công"); } } catch (Exception e) { } return conn; } public static void main(String[] args) { getConnectionUrl(); } } 4.2.2 Lớp Main: lớp chương trình: package DnsServer; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; public class MainDnsServer { static final int port=123; private ServerSocket server=null; public MainDnsServer() Trang 14 { try { server = new ServerSocket(port); int localport=server.getLocalPort(); System.out.println("Server lắng nghe kết nối port : "+localport); } catch (IOException ex) { Logger.getLogger(MainDnsServer.class.getName()).log(Level.SEVERE, null, ex); } } public void Action(){ Socket client=null; int i=0; try { while ((client = server.accept()) != null) { i++; int portclient = client.getPort(); System.out.println("client: " + client.getInetAddress().getHostName() + " yêu cầu giải port: " + portclient); new ServerThreadDns(client, "Kết thúc lượt truy cập thứ: " + i); // tạo (làm đối tượng) để thực tác vụ } } catch (IOException ex) { Logger.getLogger(MainDnsServer.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String[] args) { new MainDnsServer().Action(); Trang 15 } } 4.2.3 Lớp ServerThreadDns: lớp xem cần phân giải IP hay phân giải Domain: package DnsServer; import Database.ResolveDNS; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class ServerThreadDns implements Runnable{ private Scanner in=null; private PrintWriter out=null; private Socket client; private String name; private String a; private static ResolveDNS phangiai; public ServerThreadDns(Socket client, String name) throws IOException { this.client=client; this.name=name; in= new Scanner(this.client.getInputStream()); out= new PrintWriter(this.client.getOutputStream(),true); new Thread(this).start(); } public static boolean isNumberic(String str){ try{ Long.parseLong(str); return (true); } catch (Exception e){ Trang 16 return (false); } } public void run() { try{ while(true) { phangiai=new ResolveDNS(); String chuoi=in.nextLine().trim(); Scanner sc=new Scanner(chuoi); String get=sc.nextLine(); int dodai=get.length(); String kytu=get.substring(dodai-1,dodai); if(isNumberic(kytu)){ String kq= phangiai.ResoleIP(get); System.out.println("Client yêu cầu phân giải địa IP này: "+get); if(kq==null) { System.out.println("Địa IP khơng có cache, cần cập nhật"); int pg=phangiai.InsertIpData(get); if(pg==1) { kq=phangiai.ResoleIP(get); out.println(kq); } if(pg==0) out.println("220"); } out.println(kq); System.out.println("Kết trả : "+kq); Trang 17 } else { String kq= phangiai.ResoleDomainName(get); System.out.println("Client yêu cầu phân giải tên miền này: "+get); if(kq==null){ System.out.println("Tên miền khơng có cache, cần cập nhật"); int pg=phangiai.InsertDomainData(get); if(pg==1){ kq=phangiai.ResoleDomainName(get); out.println(kq); } if(pg==0) out.println("230"); } out.println(kq); System.out.println("Kết trả client: "+kq); } } }catch(Exception e){ System.out.println(name+" Ngắt kết nối BYE "); }finally{ try{client.close();}catch(Exception e){} } } } 4.2.4 Lớp ResolveDNS: lớp phân giải IP hay Domain , cập nhật liệu vào sở liệu: package Database; Trang 18 import com.mysql.jdbc.Connection; import com.mysql.jdbc.Statement; import java.net.InetAddress; import java.net.UnknownHostException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.ImageIcon; import javax.swing.JOptionPane; public class ResolveDNS { private static Connection conn = null; private static Statement st = null; private static ResultSet rs = null; private static String kq=null; private static String listIp=null; private static String ip=null; private static String domainname=null; public ResolveDNS(){ } public String ResoleIP(String chuoi) { ip=chuoi; try { conn = (Connection) connection.getConnectionUrl(); st = (Statement) conn.createStatement(); String query = "SELECT * FROM dns where dns.ip='"+ ip +"' "; rs = st.executeQuery(query); Trang 19 kq=""; while (rs.next()) { domainname = rs.getString(3); kq= domainname; } } catch (SQLException ex) { return null; } if(kq!="") return kq; else return null; } public String ResoleDomainName(String chuoi){ domainname=chuoi; try { conn = (Connection) connection.getConnectionUrl(); st = (Statement) conn.createStatement(); String query = "SELECT * FROM dns where dns.name='"+domainname+"' "; rs = st.executeQuery(query); listIp=""; while (rs.next()) { String Ip = rs.getString(2); listIp=listIp + " " + Ip; } } catch (SQLException ex) { return null; } if (listIp!="") Trang 20 return listIp; else return null; } public static boolean isNumberic(String str) { try { Long.parseLong(str); return (true); } catch (Exception e) { return (false); } } public int InsertIpData(String ip) { try { conn = (Connection) connection.getConnectionUrl(); try { st = (Statement) conn.createStatement(); } catch (SQLException ex) { System.out.println("Lổi tạo statement"); return 0; } try Trang 21 { InetAddress addr = InetAddress.getByName(ip); String host=addr.getHostName(); int dodai=host.length(); String kytu=host.substring(dodai-1,dodai); if(this.isNumberic(kytu)==false) { String query = "Insert into dns values ( null,'" +ip+ "','" +host+ "') "; st.executeUpdate(query); System.out.println("Cập nhật tên miền cho IP thành công"); return 1; } else { System.out.println("Địa IP sai"); return 0; } } catch (UnknownHostException ex) { System.out.println("Lỗi truy vấn sở liệu với IP"); return 0; } } catch(Exception e) { System.out.println("Địa IP không tồn "); return 0; } } public int InsertDomainData(String domain){ Trang 22 try { int i ,j ; conn = (Connection) connection.getConnectionUrl(); try { st = (Statement) conn.createStatement(); } catch (SQLException ex) { System.out.println("Lổi tạo statement"); } //Lay tat ca cac IP cua ten mien vua nhap InetAddress addr[] = InetAddress.getAllByName(domain); for(i = 0; i

Ngày đăng: 27/05/2014, 06:08

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan