版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課題一:基于TCP的Socket通訊編程課程設(shè)計(jì)目的:能夠深刻了解socket編程思想;從實(shí)現(xiàn)層面理解TCP和UDP鏈接的不同。課程設(shè)計(jì)環(huán)境:windows XP或 win7 系統(tǒng);配置有java虛擬機(jī)的環(huán)境變量;編寫java程序的軟件Eclipse。課程設(shè)計(jì)原理: Windows Sockets規(guī)范本意在于提供給應(yīng)用程序開發(fā)者一套簡單的API,并讓各家網(wǎng)絡(luò)軟件供應(yīng)商共同遵守。此外,在一個(gè)特定版本W(wǎng)indows的基礎(chǔ)上,Windows Sockets也定義了一個(gè)二進(jìn)制接口(ABI),以此來保證應(yīng)用Windows Sockets API的應(yīng)用程序能夠在任何網(wǎng)絡(luò)軟件供應(yīng)商的符合Windows So
2、ckets協(xié)議的實(shí)現(xiàn)上工作。因此這份規(guī)范定義了應(yīng)用程序開發(fā)者能夠使用,并且網(wǎng)絡(luò)軟件供應(yīng)商能夠?qū)崿F(xiàn)的一套庫函數(shù)調(diào)用和相關(guān)語義。 遵守這套Windows Sockets規(guī)范的網(wǎng)絡(luò)軟件,我們稱之為Windows Sockets兼容的,而Windows Sockets兼容實(shí)現(xiàn)的提供者,我們稱之為Windows Sockets提供者。一個(gè)網(wǎng)絡(luò)軟件供應(yīng)商必須百分之百地實(shí)現(xiàn)Windows Sockets規(guī)范才能做到現(xiàn)Windows Sockets兼容。課程設(shè)計(jì)內(nèi)容:網(wǎng)絡(luò)程序初始化,服務(wù)器和客戶端WinSock API均要求在調(diào)用其他WinSock函數(shù)以前先調(diào)用WSAStartUp函數(shù)初始化。 (2)創(chuàng)建套接
3、字Socket()。 (3)配置并啟動(dòng)套接字。 (4)通過Socket發(fā)送和接收數(shù)據(jù)。 (5)程序結(jié)束時(shí)必須關(guān)閉Socket,使用與WSAStartUp()相對應(yīng)的函數(shù)WSACleanUp(),釋放所分配的內(nèi)部緩沖區(qū)和其他資源。代碼:EchoThreadServer:import .*;public class EchoThreadServer public static void main(String args) throws Exception/ TODO Auto-generated method stubServerSocket server = null;Socket client
4、 = null;InetAddress remAdd = null;server = new ServerSocket(12345);boolean f = true;while (f) System.out.println(連接正在建立,請等待);client = server.accept();System.out.println(客戶端的IP地址和端口號是: + client.getLocalSocketAddress();new Thread(new EchoThread(client).start();server.close();EchoThread:import java.io.
5、*;import .Socket;public class EchoThread implements Runnableprivate Socket client = null;public EchoThread(Socket client)this.client = client;public void run()BufferedReader buf = null;PrintStream out = null;BufferedReader input = null;try out = new PrintStream(client.getOutputStream();buf = new Buf
6、feredReader(new InputStreamReader(client.getInputStream();input = new BufferedReader(new InputStreamReader(System.in);boolean flag = true ;while(flag)String str = buf.readLine();System.out.println(Client: + str);if (str = null | .equals(str) flag = false;else if(goodbye.equals(str) flag = false;else
7、 out.println(Echo: + str);client.close(); catch (Exception e) / TODO: handle exceptionEchoClient:import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintStream;import .Socket;public class EchoClient public static void main(String args) throws ExceptionSocket client = null;
8、client = new Socket(localhost,12345);BufferedReader buf = null;PrintStream out = null;BufferedReader input = null;input = new BufferedReader(new InputStreamReader(System.in);buf = new BufferedReader(new InputStreamReader(client.getInputStream();out = new PrintStream(client.getOutputStream();boolean
9、flag = true;while(flag)System.out.println(客戶端輸入信息:);String str = input.readLine(); out.println(str);if (goodbye.equals(str) flag = false;else String echo = buf.readLine();System.out.println(echo);buf.close();client.close();課程設(shè)計(jì)結(jié)果截圖:服務(wù)器端截圖:客戶端截圖:課程設(shè)計(jì)總結(jié):課題二:端口掃描課程設(shè)計(jì)目的:加深對課堂講授知識的理解;熟練的掌握基本的網(wǎng)絡(luò)編程技術(shù)和方法;建立
10、網(wǎng)絡(luò)編程整體概念;培養(yǎng)具有研究、設(shè)計(jì)、編制和調(diào)試網(wǎng)絡(luò)程序的能力。課程設(shè)計(jì)環(huán)境:1.windows XP或 win7 系統(tǒng);2.配置有java虛擬機(jī)的環(huán)境變量;3.編寫java程序的軟件Eclipse。課程設(shè)計(jì)原理:端口掃描器功能簡介:服務(wù)器上所開放的端口就是潛在的通信通道,也就是一個(gè)入 侵通道。對目標(biāo)計(jì)算機(jī)進(jìn)行端口掃描,能得到許多有用的信息,進(jìn)行端口掃描的方法很多,可以是手工進(jìn)行掃描、也可以用端口掃描軟件進(jìn)行。掃描器通過選用遠(yuǎn)程TCP/IP不同的端口的服務(wù),并記錄目標(biāo)給予的回答,通過這種方法可以搜集到很多關(guān)于目標(biāo)主機(jī)的各種有用的信息,例如遠(yuǎn)程系統(tǒng)是否支持匿名登陸、是否存在可寫的 FTP 目錄、
11、是否開放 TELNET 服務(wù)和 HTTPD 服務(wù)等。 2實(shí)驗(yàn)所用的端口掃描技術(shù):端口掃描技術(shù)有 TCP connect()掃描、 TCP SYN 掃描、TCP FIN 掃描、IP段掃描等等。本次實(shí)驗(yàn)所用的技術(shù)是TCP connect()掃描,這是最基本的TCP掃描,操作系統(tǒng)提供的 connect()系統(tǒng)調(diào)用可以用來與每一個(gè)感興趣的目標(biāo)計(jì)算機(jī)的端口進(jìn)行連接。如果端口處于偵聽狀態(tài),那么connect()就能成功。否則,這個(gè)端口是不能用的,即 沒有提供服務(wù)。這個(gè)技術(shù)的一個(gè)最大的優(yōu)點(diǎn)是,你不需要任何權(quán)限。系統(tǒng)中的任何用戶都有權(quán)利使用這個(gè)調(diào)用。課程設(shè)計(jì)內(nèi)容:編寫一個(gè)端口掃描程序,能夠顯示某個(gè)IP或某段I
12、P的計(jì)算機(jī)的某一個(gè)或某些端口是否正在工作?;竟ぷ鬟^程如下:設(shè)定好一定的端口掃描范圍;設(shè)定每個(gè)端口掃描的次數(shù),因?yàn)橛锌赡苡械亩丝谝淮螔呙杩赡懿煌ǎ?創(chuàng)建 socket,通過socket的connect方法來連接遠(yuǎn)程IP地址以及對應(yīng)的端口; (4)如果返回false,表示端口沒有開放,否則端口開放。實(shí)現(xiàn)代碼:package com.han.socket;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListe
13、ner;import .InetAddress;import .Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class SocketView public static void main(String args) JFram
14、e frame = new JFrame(主機(jī)端口掃描程序);frame.setLayout(new BorderLayout(3,3);JPanel pan1 = new JPanel();JPanel pan2 = new JPanel();JPanel pan3 = new JPanel();pan1.setLayout(new GridLayout(2,2,5,5);pan2.setLayout(new BorderLayout(3,3);pan3.setLayout(new GridLayout(1,2,5,5);frame.setSize(400, 450);/定義各個(gè)組件JLab
15、el lb1 = new JLabel(Host Address);JLabel lb2 = new JLabel(Port Number);JLabel lb3 = new JLabel(Port Status);final JTextField jf1 = new JTextField();final JTextField jf2 = new JTextField();final JTextArea ja = new JTextArea();JButton jb1 = new JButton(TCP Scan);JButton jb2 = new JButton(UDP Scan);JSc
16、rollPane jp = new JScrollPane(ja);pan1.add(lb1);pan1.add(lb2);pan1.add(jf1);pan1.add(jf2);pan2.add(lb3,BorderLayout.NORTH);pan2.add(jp,BorderLayout.CENTER);pan3.add(jb1);pan3.add(jb2);frame.add(pan1,BorderLayout.NORTH);frame.add(pan2,BorderLayout.CENTER);frame.add(pan3,BorderLayout.SOUTH);frame.setD
17、efaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);jb1.addActionListener(new SocketPort(); class SocketPort implements ActionListener private String ip = jf1.getText(); private String hostname = new String();public void actionPerformed(ActionEvent e) try InetAddress address = InetAddr
18、ess.getByName(ip); System.out.println(address); hostname = address.getHostName(); System.out.println(hostname);ja.setText(hostname); catch (Exception exception) System.out.println(Could not find + ip);ja.setText(Could not find + ip);try PrintWriter fout = new PrintWriter( new FileWriter(PortInf.txt)
19、; fout.println(Information Of The Port On the + hostname +computer ); fout.println(); ja.setText(Information Of The Port On the + hostname +computer);for(int nport = 25;nport 27;+nport)try Socket s = new Socket(hostname,nport); fout.println(The port + nport + is open!); fout.println(Connected to + s
20、.getInetAddress() + on port + s.getPort() + from port + s.getLocalPort() + of + s.getLocalAddress(); ja.setText(The port + nport + is open!);ja.setText(Connected to + s.getInetAddress() + on port + s.getPort() + from port + s.getLocalPort() + of + s.getLocalAddress(); catch (Exception exception) / T
21、ODO: handle exceptionfout.println(The port + nport + is closed!);ja.setText(The port + nport + is closed!);fout.close(); catch (Exception exception) exception.printStackTrace(); 課程設(shè)計(jì)結(jié)果截圖:課程設(shè)計(jì)總結(jié)課題三:捕獲分析IP數(shù)據(jù)包課程設(shè)計(jì)目的:掌握IP數(shù)據(jù)報(bào)的格式;理解IP協(xié)議的工作原理及工作過程;學(xué)會網(wǎng)絡(luò)編程的方法和技巧。課程設(shè)計(jì)環(huán)境:windows XP或 win7 系統(tǒng);以太網(wǎng),可以訪問外部網(wǎng)頁;VC程序編輯
22、器。課程設(shè)計(jì)原理: IP 數(shù)據(jù)包的格式說明IP數(shù)據(jù)包格式包含了標(biāo)頭固定部分,標(biāo)頭可變部分和數(shù)據(jù)區(qū)三部分。IP數(shù)據(jù)報(bào)標(biāo)頭部分固定為20個(gè)字節(jié),其中包含了12個(gè)參數(shù)域,各參數(shù)域隱含著網(wǎng)間協(xié)議的傳輸機(jī)制。IP具體的標(biāo)頭格式如圖所示。課程設(shè)計(jì)內(nèi)容:本設(shè)計(jì)的目標(biāo)是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。程序的具體要求如下:(1)捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,顯示結(jié)果,并將結(jié)果寫入日志文件。(2)顯示的內(nèi)容包括:捕獲的IP包的版本、頭長度、服務(wù)類型、數(shù)據(jù)包總長度、數(shù)據(jù)包標(biāo)識、分段標(biāo)志、分段偏移值、生存時(shí)間、上層協(xié)議類型、頭校驗(yàn)和、源IP地址和目的I
23、P地址等內(nèi)容。(3)設(shè)置停止標(biāo)志,當(dāng)程序接收到停止命令時(shí)即停止。代碼:#include #pragma comment( lib, Ws2_32.lib );struct ether_header u_int8_t ether_dhost6; u_int8_t ether_shost6; u_int16_t ether_type;typedef u_int32_t in_addr_t;/*struct in_addr in_addr_t s_addr;*/struct ip_header#ifdef WORDS_BIGENDIAN u_int8_t ip_version:4; u_int8_t
24、 ip_header_length:4;#else u_int8_t ip_header_length:4; u_int8_t ip_version:4;#endif u_int8_t ip_tos; u_int16_t ip_length; u_int16_t ip_id; u_int16_t ip_off; u_int8_t ip_ttl; u_int8_t ip_protocol; u_int16_t ip_checksum; struct in_addr ip_source_address; struct in_addr ip_destination_address;void ip_p
25、rotocol_packet_callback(u_char * argument,const struct pcap_pkthdr * packet_header, const u_char * packet_content) struct ip_header * ip_protocol; u_int header_length; u_int offset; u_char tos; u_int16_t checksum; ip_protocol=(struct ip_header*)(packet_content+14); checksum=ntohs(ip_protocol-ip_chec
26、ksum); header_length=ip_protocol-ip_header_length*4; tos=ip_protocol-ip_tos; offset=ntohs(ip_protocol-ip_off); printf(-ip協(xié)議包-n); printf(版本 :%dn,ip_protocol-ip_version); printf(首部長度:%dn,header_length); printf(服務(wù)類型 :%dn,tos); printf(總長度 :%dn,ntohs(ip_protocol-ip_length); printf(標(biāo)識 :%dn,ntohs(ip_protoc
27、ol-ip_id); printf(偏移:%dn,(offset&0 x1fff)*8); printf(生存時(shí)間:%dn,ip_protocol-ip_ttl); printf(協(xié)議:%dn,ip_protocol-ip_protocol); switch(ip_protocol-ip_protocol) case 6: printf(該數(shù)據(jù)包協(xié)議類型是 Tcpn); break; case 17: printf(該數(shù)據(jù)包協(xié)議類型是 Udpn); break; case 1: printf(該數(shù)據(jù)包協(xié)議類型是 Icmpn); break; default: break; printf(校驗(yàn)和
28、:%dn,checksum); printf(源地址 :%sn,inet_ntoa(ip_protocol-ip_source_address); printf(目的地址 :%sn,inet_ntoa(ip_protocol-ip_destination_address);void ethernet_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr * packet_header, const u_char * packet_content) u_short ethernet_type; struct ethe
29、r_header *ethernet_protocol; u_char *mac_string; static int packet_number=1;printf(*n); printf( the %d packet is captured n,packet_number); printf(-以太網(wǎng)幀-n); ethernet_protocol=(struct ether_header *)packet_content; printf(以太網(wǎng)幀類型:); ethernet_type=ntohs(ethernet_protocol-ether_type); printf(%04xn,ether
30、net_type); switch(ethernet_type) case 0 x0800: printf(網(wǎng)絡(luò)層協(xié)議是 ip 協(xié)議n); break; case 0 x0806: printf(網(wǎng)絡(luò)層協(xié)議是 arp 協(xié)議n); break; case 0 x8035: printf(網(wǎng)絡(luò)層協(xié)議是 rarp 協(xié)議n); break; default: break; printf(MAC源地址:); mac_string=ethernet_protocol-ether_shost;printf(%02x:%02x:%02x:%02x:%02x:%02xn,*mac_string,*(mac_string+1),*(mac_string+2), *(mac_string+3),*(mac_string+4),*(mac_string+5); printf(MAC目的地址 :); mac_string=ethernet_protocol-ether_dhost;printf(%02x:%02x:%02x:%02x:%02x:%02xn,*mac_string,*(mac_string+1),*(mac_string+2), *(mac_string+3),*(mac_string+4),*(mac_string+5); switch(ethernet_t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車租賃合同服務(wù)內(nèi)容詳細(xì)描述3篇
- 二零二五年度建筑工程勞務(wù)承包與信息化建設(shè)合同3篇
- 二零二五年度賓館租賃承包與智能客房服務(wù)協(xié)議3篇
- 二零二五年度制造業(yè)學(xué)徒工勞動(dòng)合同范本合同模板3篇
- 2025版二零二五年度醫(yī)療健康產(chǎn)業(yè)合伙人合作協(xié)議2篇
- 課程設(shè)計(jì)物料橫算
- 二零二五年度店鋪個(gè)人股份全部轉(zhuǎn)讓與投資回報(bào)合同3篇
- 海南醫(yī)學(xué)院《數(shù)字電子技術(shù)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南醫(yī)學(xué)院《電力系統(tǒng)穩(wěn)態(tài)分析實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度房地產(chǎn)代理公司脫貧攻堅(jiān)合作協(xié)議書3篇
- 《流感科普宣教》課件
- 紅領(lǐng)巾知識伴我成長課件
- 廚邦醬油推廣方案
- 乳腺癌診療指南(2024年版)
- 腦血管病的三級預(yù)防
- 保險(xiǎn)產(chǎn)品創(chuàng)新與市場定位培訓(xùn)課件
- 2022-2023學(xué)年山東省淄博四中高二(上)期末數(shù)學(xué)試卷含答案
- 《建筑賦比興》一些筆記和摘錄(上)
- 時(shí)間管理的原則與方法
- 【A公司人力資源招聘管理問題及優(yōu)化建議分析13000字(論文)】
- 鋼結(jié)構(gòu)牛腿計(jì)算
評論
0/150
提交評論