Thông tin về một tên miền do PDS được phân cấp quản lý thì được lưu trữ tại đây và sau đó có thể được chuyên sang các Secondary DNS Server SDS.. DNS được khuyến nghị nên sử dụng ít nhấ
Trang 1
TRƯỜNG ĐHBK ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN
00 beg BAO CAO DO AN
Trang 2Báo cdo đóô án lập trình mạng
Để tài 24: Xây dựng chương trình giả lập dịch vụ DNS
I LOIMO DAU
Ngày nay, với sự phát triển của khoa học kỹ thuật, hàng loạt máy tính ra đời Tuy
nhiên, chúng sẽ không hoạt động hiệu quả nếu hoạt động độc lập với nhau Vì vậy, việc
kết nối các máy tính lại mới nhau là vô cùng quan trọng, không những tăng hiệu quá công việc mà còn giúp chúng ta có thê thông tin liên lạc với nhau đễ dàng hơn, tạo sự phát triển cho xã hội
“Lập trình mang’ ' là môn học giúp chúng ta nắm rõ cơ chế hoạt động cũng như cách thức đề kết nối các máy tính lại với nhau, đồng thời thực hiện việc trao đôi dữ liệu qua lại giữa nhiều máy “Đỗ án môn học Lập trình mạng” giúp sinh viên hiểu rõ hơn về
cách môn học cũng như đưa môn học ứng dụng vào thực tiễn
II GIOI THIEU VE DICH VU DNS
1 Máy chủ phân giải tên miền DNS là gì ?
Mỗi máy tính, thiết bị mạng tham gia vào mạng Internet đều giao tiếp với
nhau bằng địa chỉ IP (Internet Protocol) Dé thuận tiện cho việc sử dụng và dễ
nhớ ta dùng tên (Domain name) đề xác định thiết bị đó Hệ thống tên miền DNS
(Domain Name ŠSystem) được sử dụng để ánh xạ tên miền thành địa chỉ IP Vì
vậy, khi muốn liên hệ tới các máy, chúng chỉ cần sử dụng chuỗi ký tự dễ nhớ
(domain name) nhu: www.microsoft.com, www.ibm.com , thay vi st dụng địa chỉ IP là một dãy số đài khó nhớ
Trang 3
miền mà nó được phép quản lý Thông tin về một tên miền do PDS được phân
cấp quản lý thì được lưu trữ tại đây và sau đó có thể được chuyên sang các
Secondary DNS Server (SDS) Các tên miền do PDS quản lý thì được tạo, và sửa
đổi tại PDS và sau đó được cập nhật dén cac SDS
- Secondare DNS Server(SDS)
DNS được khuyến nghị nên sử dụng ít nhất là hai DNS server để lưu địa chỉ cho mỗi một vùng (zone) PDS quản lý các vùng và SDS được sử dụng đề lưu trữ dự phòng cho vùng, và cho cả PDS SDS không nhất thiết phải có những khuyến
khích hãy sử dụng SDS được phép quản lý tên miền nhưng dữ liệu về tên miền
không phải được tạo ra từ ŠDS mà được lấy về từ PDS
SDS có thể cung cấp các hoạt động ở chế độ không tải trên mạng Khi lượng
truy vẫn vùng tăng cao, PDS sẽ chuyên bớt tai sang SDS (qua trình này còn được
gọi là cân bằng tải), hoặc khi PDS bị sự cô thì SDS hoạt động thay thế cho đến
khi PDS hoạt động trở lại, SDS thường được sử dụng tại nơi gần với các máy
trạm (client) để có thể phục vụ cho các truy vấn một cách dễ dàng Tuy nhiên,
cài đặt SDS trên cùng một subnet hoặc dùng một kết nối với PDS là không nên
Điều đó sẽ là một giải pháp tốt đề dự phòng cho PDS, vì khi kết nối đến PDS bị hỏng thì cũng không ảnh hưởng gì tới đến SDS
Ngoài ra PDS luôn duy trì một lượng lớn đữ liệu và thường xuyên thay đôi hoặc thêm các địa chỉ mới vào các vùng Do đó, DNS server sử đụng một cơ chế cho phép chuyên các thông tin từ PDS sang SDS và lưu giữ trên đĩa Khi cần phục
hồi đữ liệu về các vùng, chúng ta có thê sử dụng giải pháp lấy toàn bộ hoặc chỉ lấy phần thay đổi
3 Chức năng của DNS
Mỗi Website có một tên ( là tên miền hay đường dẫn URL: Universal Resource Locator) và một địa chỉ IP Dia chỉ IP gồm 4 nhóm số cách nhau bằng dấu chấm
Trang 4Báo cdo đóô án lập trình mạng
Khi mở một trình duyệt Web và nhập tên website, trình duyệt sẽ đến thăng
website mà không cần phải thông qua việc nhập địa chỉ IP của trang web Quá
trình "dịch" tên miền thành địa chỉ IP dé cho trình duyệt hiểu và truy cập được
vào website là công việc của một DNS server Các DNS trợ giúp qua lại với
nhau đề dịch địa chỉ "IP” thành "tên” và ngược lại Người sử dụng chỉ cần nhớ "tên"
không cân phải nhớ địa chỉ IP (địa chỉ IP là những con sô rât khó nhớ)
Nguyên tắc làm việc của DNS
Mỗi nhà cung cấp dịch vụ vận hành và duy trì DNS server riêng của mình, gồm các máy bên trong phần riêng của mỗi nhà cung cấp dịch vụ đó trong Internet
Tức là, nều một trình duyệt tìm kiếm địa chỉ của một website thì DNS server
phân giải tên website này phải là DNS server của chính tổ chức quản lý website
đó chứ không phải là của một tô chức (nhà cung cấp địch vụ) nào khác
INTERNIC ( Internet Network Information Center) chịu trách nhiệm theo đối các
tên miền và các DNS server tương ứng INTERNIC là một tô chức được thành
lap boi NFS (National Science Foundation), AT&T va Network Solution, chiu
trách nhiệm đăng ký các tên miễn của Internet INTERNIC chỉ có nhiệm vụ quản
lý tất cả các DNS server trên Internet chứ không có nhiệm vụ phân giải tên cho
từng địa chỉ
DNS co kha nang tra vấn các DNS server khác đề có được một cái tên đã được phân giải DNS server của mỗi tên miền thường có hai việc khác biệt Thứ nhất, chịu trách nhiệm phân giải tên từ các máy bên trong miền về các địa chỉ Internet,
cả bên trong lẫn bên ngoài miền nó quản lý Thứ hai, chúng trả lời các DNS
server bên ngoài đang có gắng phân giải những cái tên bên trong miền nó quản
lý - DNS server có khả năng ghi nhớ lại những tên vừa phân giải Đề dùng cho những yêu cầu phân giải lần sau Số lượng những tên phân giải được lưu lại tùy thuộc vào quy mô của từng DNS
Trang 5
HH XAY DUNG CHUONG TRINH MO PHONG DICH VU DNS
Phuong phap trién khai dé tai
* Tim hiéu m6 hinh mang client/server, m6 hinh OSI va TCP/IP dé nam ving
kiến thức cơ bản về mạng máy tính
« _ Tìm hiều một số giao thức trong họ UDP biết thêm về cách thức lập trình và tô chức thành phân
« _ Tìm hiều thêm về kỹ thuật lập trình với datagramsocket sau đó ứng dụng vào
Thực hiện nhập một chuỗi là một domain name hoặc IP address Dong gói chuỗi
đã nhập vào một đôi tượng theo giao thức UDP gửi lên server, nhận đôi tượng đáp ứng trả về từ server phân tích và hiện thị kết quả
mà nó quản lý Server 3 là máy chủ mức cao nhất, có khả năng trả đáp ứng cho bất
cứ truy vấn nào tới nó
2 Cấu trúc dữ liệu
Toàn bộ mã của chương trình được chứa trong 3 gói sau:
a) Object Package
Chứa các lớp
© public DataBase (String dbname) throws ClassNotFoundException
Kết ni tới cơ sở dữ liệu có tên đbname
© public String search ( String txt)
Tìm kiếm domain hoac ip cho cac yéu cau từ máy tram
© public void insert (String ip, String domain)
Chèn thêm một hàng mới vào cơ sở dữ liệu với id tự cấp phat
và isBanned = false
© public void updateCheckbox (int id, Boolean vch)
Trang 6
Báo cdo đóô án lập trình mạng
public static final int SUCCESS =0;
public static final int REQUEST = 1;
public static final int FORWARD = 2;
public static final int ERROR = 3;
© Chua cac truong
private int type;
private String respond;
private String request;
private String notice;
© Cac phuong thitc get va set cho các trường
Lớp này chứa cài đặt cho một đối tượng phục vụ truyền tải thông tin
b) DNSClient Package
Lớp chứa các khai báo cho giao diện bên phía máy khách
Lớp chứa cài đặt cho một máy khách gồm các phương thức sau:
o public DNSChent()
Là constructor của lớp ClientGUI, nó tạo ra một đối tượng giao diện mới và
datagramsocket dé gin và nhan dir ligu trén client dong thoi dat timeout
© public void active ():
Thực hiện nhận chuỗi ký tự người dung cung cấp, đóng gói thành thông điệp, và gửi đến server
Trang 7
c) DNSServer Package
Lớp chứa các khai báo cho giao diện DNS Server, hiển thị bảng tên miền và địa
chỉ tương ứng, các quá trình diễn ra trên server và cho phép câm một địa chỉ
Lớp này chứa cài đặt cho một máy chủ với các phương thức:
© public ServerDNS (String dataname,int svport)
La constructor cua lớp, nơi tạo giao diện, kết nôi cơ sở dữ liệu và mở
datagramsocket dé doc ghi dữ liệu
© public void active (): kich hoat dich vu ( lang nghe, xu ly va dap img )
© public void sendMessage (Message fmsend, InetAddress fdes, int fdesport) Phuong thirc nay dong goi fmsend vao datagrampacket va gtr đối tượng từ server đên địa fdes trên công fdesport
© public void setProperty (InetAddress upsvadd,int upsvport, boolean mainsv)
Phương thức đề thiết đặt các thuộc tính cho server gồm: địa chỉ và số công
của server cấp trên, nó có phải mainserver
tạo ra 3 đối tượng DNSSecrver, thiết đặt các thuộc tính cho nó và khởi chạy
Trang 8
Báo cdo đóô án lập trình mạng
Nhận thông điệp gửi
tin tỚi máy trạm
Trang 9
Đã gửi yêu cau lén server MrKing/192.168.242.1 trên công 3333
Đã chuyễn lên server MrKing/192.168.242.1 trên công 5555
Đã chuyễn lên server MrKing/192 188.242 1 trên cong 7777
Trang 10Báo cdo đóô án lập trình mạng
Đã gửi gói tin tới MrKing/192.188.242.1 trên công 5555
Đã chuyến lên server MirlKing/192 188.242 1 trên cổng 7777
Đã gửi gói tin tới /192.168.242.1 trên cỗng 53961
Trang 11® Server 2
IP DOMAIN 165.465.80.89 www.facebook.com 74.125.128.106
184.105.178.85 209.37.248.24
nhan yéu tir /192.168.242.1 trén 3333
kiếm trong cơ sở dữ liệu
tìm
gửi gói tin tới MrKing/192.188.242.1 trên cỗng 7777
nhân được địa chỉ ip !
Trang 12
Báo cdo đóô án lập trình mạng
IP DOMAIN 208.65.153.238 www.youtube.com 74.125.128.106 Wwww.apache.com 209.37.248.24 www.galaxy.com
Đã nhận yêu cầu từ /192.168.242 1 trên 5555
Tìm kiếm trong cơ sở dữ liệu
Đã gửi gói tin tới /192.188.242.1 trên céng 5555
IV KET LUAN VA HUONG PHAT TRIEN
1) Những két quả đạt được
- Nắm vimg duoc ky thuat lap trinh Client/Server
- Hiểu rõ hơn về giao thức UDP và cách thức hoạt động của nó
2) Những vấn đề tồn tại
- Giao diện chương trình chưa đẹp mắt
- Các thức hoạt động còn khá đơn giản
3) Hướng phát triển
- Khắc phục những vấn đề tồn tại giúp chương trình hoạt động hiệu quả hơn
Trang 13
import javax.swing.table DefaultTableModel:;
public class DataBase
String url = "jdbc:odbe:"+ dbname;
Connection con = DriverManager.getConnection(url);
ResultSet rset = stmt.executeQuery(query);
while (rset.next()) ip= rset getString(2);
catch( Exception e) { e.printStackTraceQ); } return null;
}
public void insert (String ip, String domain)
Trang 14
Báo cdo đóô án lập trình mạng
int autoid = 1 id;
try
{
ResultSet rset = stmt.executeQuery("SELECT ID FROM DATA"); while (rset.next())
id= rset getInt("ID");
if(autoid == id) autoid++;
sing query = String format ("INSERT INTO DATA (ID, IP, DOMAIN,isBANNED) VALUES (%d,'%s','%#',false)",autoid,ip,domain);
private static final long serialVersionUID = IL;
public static final int SUCCESS =0;
public static final int REQUEST = 1;
public static final int FORWARD = 2;
public static final int ERROR = 3;
private int type;
private String respond;
private String request;
private String notice;
public void setType (int type)
Trang 15public void setNotice (String notice)
this notice = notice;
import java.sql ResultS etMetaData;
import java.util Vector;
import Object DataBase;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event TableModelEvent;
import javax.swing.event TableModelListener;
Trang 16Báo cdo đóô án lập trình mạng
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout CENTER);
//South Center
console = new TextArea();
console setEditable(false);
add(console,BorderLayout SOUTH);
addWindowListener(new Window Adapter()
public void windowClosing(WindowEvent e) { System.exit(0); }
}}
setResizable(false);
setVisible(true);
}
public void fillTable
Vector rowdata = new Vector();
final Vector<String> colName = new Vector<String>();
¿
String query= "SELECT * FROM DATA";
ResultSet rset = svdata stmt.executeQuery(query);
ResultSetMetaData datalnfor = rset getMetaData();
for (int i = 1; i <= dataInfor.getColumnCount(); i++)
colName.add(datalnfor.getColumnName(i));
while (rset.next()) Vector coldata = new Vector();
coldata.add (rset getInt (1));
coldata.add (rset getString (2));
coldata.add (rset getString (3));
coldata.add (rset getBoolean(4));
rowdata.add (coldata);
table.setModel(new DefaultTableModel(rowdata,colName) private static final long serial VersionUID =1L;
public String getColumnNamecint column) { return colName.get(column);
Class[] types = new Class []
{ Integer.class, String.class,
String.class, Boolean.class};
boolean[] canEdit = new boolean []
{ false, false, false, true };
public Class getColumnClass(int columnIndex) { return types [columnIndex];
Trang 17
public boolean isCellEditable(int rowIndex
, int columnIndex) {
return canEdit [columnIndex];
tab p getColumnModel().getColumn(0) setPreferredWidth( 10);
table getColumnModel().getColumn(3) setPreferredWidth( 10);
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer(); centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table setDefaultRenderer(String class, centerRenderer);
table setDefaultRenderer(Integer.class, centerRenderer);
table getModel().addTableModelL istener(this);
catch (Exception e) { e.printStackTrace(); }
}
public void writeConsole(String txt)
console.append("\n"+txt);
}
public void tableChanged(TableModelEvent e)
int row = e.getFirstRowQ);
int column = e.getColumn(Q;
TableModel model = (TableModel)e.getS ource();
String columnName = model.getColumnName(column);
int id = (int) model getValueAt(row, 0);
Boolean vch = (Boolean) model.getValueAt(row, column);
import java.net DatagramPacket;
import java.net DatagramSocket;