nmap端口狀態(tài)解析
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、扎囊網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為扎囊等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
open , 應(yīng)用程序在該端口接收 TCP 連接或者 UDP 報(bào)文。
closed 關(guān)閉的端口對于nmap也是可訪問的, 它接收nmap探測報(bào)文并作出響應(yīng)。但沒有應(yīng)用程序在其上監(jiān)聽。
filtered 由于包過濾阻止探測報(bào)文到達(dá)端口,nmap無法確定該端口是否開放。過濾可能來自專業(yè)的防火墻設(shè)備,路由規(guī)則 或者主機(jī)上的軟件防火墻。
unfiltered 未被過濾狀態(tài)意味著端口可訪問,但是nmap無法確定它是開放還是關(guān)閉。 只有用于映射防火墻規(guī)則集的 ACK 掃描才會(huì)把端口分類到這個(gè)狀態(tài)。
直接上代碼:
import?java.net.Socket;
import?java.text.SimpleDateFormat;
import?java.util.Date;
public?class?PortScanner?extends?Thread?{
private?int[]?p;
Socket?ss?=?null;
public?PortScanner(int[]?p)?{
this.p?=?p;
}
public?static?void?main(String[]?args)?{
for?(int?i?=?0;?i??65535;?i?=?i?+?100)?{
new?PortScanner(new?int[]?{?i?+?1,?i?+?100?}).start();
}
}
@Override
public?void?run()?{
for?(int?i?=?p[0];?i??p[1];?i++)?{
try?{
ss?=?new?Socket("8.8.8.8",?i);
System.out.println("掃描到端口:?"?+?i);
}?catch?(Exception?e)?{
//?System.out.println("關(guān)閉端口:?"?+?i);
}
}
}
}
使用 DatagramSocket(int port) 建立socket(套間字)服務(wù)。
將數(shù)據(jù)打包到DatagramPacket中去
通過socket服務(wù)發(fā)送 (send()方法)
關(guān)閉資源
public static void main(String[] args) {
DatagramSocket ds = null; //建立套間字udpsocket服務(wù)
try {
ds = new DatagramSocket(8999); //實(shí)例化套間字,指定自己的port
} catch (SocketException e) {
System.out.println("Cannot open port!");
System.exit(1);
}
byte[] buf= "Hello, I am sender!".getBytes(); //數(shù)據(jù)
InetAddress destination = null ;
try {
destination = InetAddress.getByName("192.168.1.5"); //需要發(fā)送的地址
} catch (UnknownHostException e) {
System.out.println("Cannot open findhost!");
System.exit(1);
}
DatagramPacket dp =
new DatagramPacket(buf, buf.length, destination , 10000);
//打包到DatagramPacket類型中(DatagramSocket的send()方法接受此類,注意10000是接受地址的端口,不同于自己的端口?。?/p>
try {
ds.send(dp); //發(fā)送數(shù)據(jù)
} catch (IOException e) {
}
ds.close();
}
}
接收步驟:
使用 DatagramSocket(int port) 建立socket(套間字)服務(wù)。(我們注意到此服務(wù)即可以接收,又可以發(fā)送),port指定監(jiān)視接受端口。
定義一個(gè)數(shù)據(jù)包(DatagramPacket),儲存接收到的數(shù)據(jù),使用其中的方法提取傳送的內(nèi)容
通過DatagramSocket 的receive方法將接受到的數(shù)據(jù)存入上面定義的包中
使用DatagramPacket的方法,提取數(shù)據(jù)。
關(guān)閉資源。
import java.net.*;
public class Rec {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(10000); //定義服務(wù),監(jiān)視端口上面的發(fā)送端口,注意不是send本身端口
byte[] buf = new byte[1024];//接受內(nèi)容的大小,注意不要溢出
DatagramPacket dp = new DatagramPacket(buf,0,buf.length);//定義一個(gè)接收的包
ds.receive(dp);//將接受內(nèi)容封裝到包中
String data = new String(dp.getData(), 0, dp.getLength());//利用getData()方法取出內(nèi)容
System.out.println(data);//打印內(nèi)容
ds.close();//關(guān)閉資源
}
}