Bài giảng Lập trình mạng - Bài 6: Giới thiệu một số thư viện hàm bằng Java hỗ trợ xây dựng ứng dụng mạng - Bùi Minh Quân

pdf 21 trang ngocly 3580
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình mạng - Bài 6: Giới thiệu một số thư viện hàm bằng Java hỗ trợ xây dựng ứng dụng mạng - Bùi Minh Quân", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_mang_bai_6_gioi_thieu_mot_so_thu_vien_ha.pdf

Nội dung text: Bài giảng Lập trình mạng - Bài 6: Giới thiệu một số thư viện hàm bằng Java hỗ trợ xây dựng ứng dụng mạng - Bùi Minh Quân

  1. Giới thiệu một số thư viện hàm bằng Java hỗ trợ xây dựng ứng dụng mạng  URL và URLConnection  JavaMail API  JPCAP  OpenYMSG, JCIFS Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 1
  2. URL và URLConnection  java.net.URL  URL (String spec) VD: URL u1 = new URL(" ");  URL (String protocol, String host, int port, String file) VD: URL u2 = new URL("http", "www.cit.ctu.edu.vn", 80 "/thongbao/tb1.html");  URLConnection openConnection(); VD: URLConnection uc = u1.openConnection( );  InputStream openStream(); VD: InputStream is = u1.openStream( );  Các phương thức: String getFile(), getHost(), getPath(), getPort(), getProtocol(), getQuery(), getRef(), getUserInfo(), Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 2
  3. URL và URLConnection  java.net.URL Nội dung file HTML, không có phần header Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 3
  4. URL và URLConnection  java.net.URLConnection  InputStream getInputStream( );  OutputStream getOutputStream( ); VD: InputStream raw_in = uc.getInputStream( );  String getContentType();  int getContentLength();  String getContentEncoding();  long getDate();  long getExpiration()  long getLastModified()  String getHeaderField(int n)  void setDoOutput(boolean writedata) Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 4
  5. URL và URLConnection  java.net.URLConnection Lấy dữ liệu từ WebServer bằng câu lệnh GET Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 5
  6. URL và URLConnection  java.net.URLConnection Gửi dữ liệu lên form bằng câu lệnh POST Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 6
  7. JavaMail API  Là bộ thư viện hàm mở rộng của Java, không thuộc bộ JDK (nhưng là 1 thành phần của J2EE).  Hỗ trợ SMTP, POP, IMAP, MIME,  Download miễn phí từ địa chỉ:  Cần cài đặt trước JavaBeans Activation Framework.  Các gói cơ bản:  javax.mail  javax.mail.internet  Còn nhiều gói viết bằng Java hỗ trợ dịch vụ Mail như: POPpers, JDAVMail, JHTTPMail, GNU JavaMail, Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 7
  8. JavaMail API  Gửi email Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 8
  9. JavaMail API  Nhận email Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 9
  10. JavaMail API  Gửi email kèm file Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 10
  11. JPCAP  Giới thiệu  Mã nguồn mở (LGPL).  Bộ thư viện hàm viết bằng Java.  Sử dụng để bắt gói (tương tự như Winpcap trên Windows):  Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4.  Lưu vào file, sau đó đọc file để phân tích gói.  Còn dùng để hỗ trợ gửi gói tin thô (raw packet).  Phát triển bởi Keita Fujii, University of California, Irvine.  Có thể tham khảo từ địa chỉ:  JPCAP không thể dùng để khóa, lọc lưu thông đến 1 host hay 1 ứng dụng nào => không dùng để viết QoS, Firewall. Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 11
  12. JPCAP  Thư viện hàm  Tham khảo tại địa chỉ:  Có 2 gói: jpcap và jpcap.packet  Một số lớp:  ARPPacket  JpcapSender  DatalinkPacket  JpcapWriter  EthernetPacket  NetworkInterface  ICMPPacket  NetworkInterfaceAddress  IPPacket  Packet  IPv6Option  PacketReceiver  JpcapCaptor  TCPPacket  UDPPacket Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 12
  13. JPCAP  Lấy danh sách card mạng NetworkInterface[] devices = JpcapCaptor.getDeviceList();  Hiển thị thông tin các card mạng for (int i = 0; i < devices.length; i++) { System.out.println(i + ": “ + devices[i].name + "(" + devices[i].description+ ")“ ); System.out.println(devices[i].datalink_name + "(" + devices[i].datalink_description + ")“ ); for (byte b : devices[i].mac_address) System.out.print(Integer.toHexString(b&0xff) + ":"); for (NetworkInterfaceAddress a : devices[i].addresses) System.out.println(“\n IP: “ + a.address + " “ + a.subnet + " “ + a.broadcast); } Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 13
  14. JPCAP  Mở 1 card mạng pcapCaptor.openDevice ( NetworkInterface intrface, int snaplen, boolean promics, int to_ms)  intrface: card mạng  snaplen: số lượng byte tối đa mỗi lần bắt  promics: true - nếu bắt tất cả các gói false - nếu chỉ bắt các gói gửi đến máy mình.  to_ms: thời gian bắt gói (tính bằng ms) Ví dụ  NetworkInterface[] devices = JpcapCaptor.getDeviceList();  int index = ; // Lấy chỉ số của card mạng chọn  JpcapCaptor captor = JpcapCaptor.openDevice (devices[index], 65535, false, 20); Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 14
  15. JPCAP  Bắt gói – Cách 1: callback method  Thiết kế lớp implements lớp PacketReceiver.  Gọi hàm processPacket (processPacket sẽ tự động gọi hàm receivePacket(Packet p) để bắt các gói) Ví dụ: class PacketPrinter implements PacketReceiver { public void receivePacket(Packet p) { System.out.println(p); } } JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20); //call processPacket() to let Jpcap call PacketPrinter.receivePacket() for every packet capture. captor.processPacket(10,new PacketPrinter()); captor.close(); Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 15
  16. JPCAP  Bắt gói – Cách 2: capture one-by-one  Dùng hàm getPacket() của lớp JpcapCaptor.  Phải gọi hàm nhiều lần để bắt từng gói. Ví dụ JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20); for(int i=0;i<10;i++){ //capture a single packet and print it out System.out.println(captor.getPacket()); } captor.close(); Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 16
  17. JPCAP  Lọc gói  Sử dụng hàm setFilter(String filter, boolean optimize). Ví dụ: // captures only UDP traffic captor.setFilter("UDP", true); // from the official tutorial, captures only packets that are both IPv4 captor.setFilter("IP and TCP",true);  Sử dụng các lớp cụ thể để bắt gói TCP, UDP, Ví dụ: // Với rec là đối tượng thuộc lớp implements lớp PacketReceiver Packet p = rec.getPacket(); if(p!=null && p instanceof TCPPacket) { TCPPacket tcp = (TCPPacket)p; System.out.println(tcp.dst_port); } Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 17
  18. JPCAP  Lưu kết quả bắt gói vào file  Mở file cần lưu: JpcapWriter.openDumpFile(JpcapCaptor c, String filename);  Ghi các gói vào file: JpcapWriter.writePacket(Packet) Ví dụ: ghi 100 gói vào file JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20); JpcapWriter writer=JpcapWriter.openDumpFile(captor,“data.cap"); for ( int i=0;i<100;i++) { Packet packet = captor.getPacket(); // Bắt gói writer.writePacket(packet); // Ghi gói vào file } writer.close(); Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 18
  19. JPCAP  Đọc nội dung từ file đã lưu gói tin  Mở file: JpcapCaptor.openFile(String filename)  Đọc file: getPacket(Packet p) trên đối tượng JpcapCaptor Ví dụ: JpcapCaptor captor=JpcapCaptor.openFile(“Data.cap"); while (true) { // read a packet from the opened file Packet packet = captor.getPacket(); // if some error occurred or EOF has reached, break the loop if(packet==null || packet==Packet.EOF) break; // otherwise, print out the packet System.out.println(packet); } captor.close(); Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 19
  20. JPCAP  Gửi 1 gói tin thô (raw packet) qua card mạng //open a network interface to send a packet to JpcapSender sender = JpcapSender.openDevice(devices[index]); //create a TCP packet with specified port numbers, flags, and other parameters TCPPacket p = new TCPPacket(12,34,56,78,false,false,false,false,true,true,true,true,10,10); //specify IPv4 header parameters p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_TCP, InetAddress.getByName("www.microsoft.com"),InetAddress.getByName("www.google.com")); //set the data field of the packet p.data = ("data").getBytes(); //create an Ethernet packet (frame) EthernetPacket ether = new EthernetPacket(); //set frame type as IP ether.frametype = EthernetPacket.ETHERTYPE_IP; //set source and destination MAC addresses ether.src_mac = new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5}; ether.dst_mac = new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10}; //set the datalink frame of the packet p as ether p.datalink = ether; //send the packet p sender.sendPacket(p); sender.close(); Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 20
  21. OpenYMSG và JCIFS  OpenYMSG  Dùng cho Yahoo Messenger.  Tham khảo tại  Nâng cấp của bộ jYMSG: (  JCIFS  Dùng cho SMB protocol (sharing trong Windows)  Tham khảo tại Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 21