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
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:
- bai_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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- JavaMail API Gửi email Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 8
- JavaMail API Nhận email Nguyễn Công Huy, BM Mạng MT&TT, Khoa CNTT&TT, ĐH Cần Thơ 9
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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