端口扫描java代码 端口扫描程序的设计与实现

有没有用java代码操作nmap进行过端口扫描的

nmap端口状态解析

宣恩网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。创新互联公司于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

open , 应用程序在该端口接收 TCP 连接或者 UDP 报文。

closed 关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响应。但没有应用程序在其上监听。

filtered 由于包过滤阻止探测报文到达端口,nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则 或者主机上的软件防火墙。

unfiltered 未被过滤状态意味着端口可访问,但是nmap无法确定它是开放还是关闭。 只有用于映射防火墙规则集的 ACK 扫描才会把端口分类到这个状态。

如何用java语言实现端口扫描器

使用 DatagramSocket(int port) 建立socket(套间字)服务。

将数据打包到DatagramPacket中去

通过socket服务发送 (send()方法)

关闭资源

public static void main(String[] args) {

DatagramSocket ds = null; //建立套间字udpsocket服务

try {

ds = new DatagramSocket(8999); //实例化套间字,指定自己的port

} catch (SocketException e) {

System.out.println("Cannot open port!");

System.exit(1);

}

byte[] buf= "Hello, I am sender!".getBytes(); //数据

InetAddress destination = null ;

try {

destination = InetAddress.getByName("192.168.1.5"); //需要发送的地址

} 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是接受地址的端口,不同于自己的端口!)

try {

ds.send(dp); //发送数据

} catch (IOException e) {

}

ds.close();

}

}

接收步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。

定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容

通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中

使用DatagramPacket的方法,提取数据。

关闭资源。

import java点虐 .*;

public class Rec {

public static void main(String[] args) throws Exception {

DatagramSocket ds = new DatagramSocket(10000); //定义服务,监视端口上面的发送端口,注意不是send本身端口

byte[] buf = new byte[1024];//接受内容的大小,注意不要溢出

DatagramPacket dp = new DatagramPacket(buf,0,buf.length);//定义一个接收的包

ds.receive(dp);//将接受内容封装到包中

String data = new String(dp.getData(), 0, dp.getLength());//利用getData()方法取出内容

System.out.println(data);//打印内容

ds.close();//关闭资源

}

}

谁有java本地监听与远程端口扫描 源程序

本地端口监听

import java.io.IOException;

import java点虐 .ServerSocket;

import java点虐 .Socket;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class SocketServer

{

private ServerSocket serverSocket;

private ExecutorService executorService;// 线程池

private final int POOL_SIZE = 600;// 单个CPU线程池大小

public SocketServer() throws IOException

{

serverSocket = new ServerSocket(9888);//监听的端口号

// Runtime的availableProcessor()方法返回当前系统的CPU数目.

executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE);

System.out.println("服务器启动");

}

public void service()

{

while (true)

{

Socket socket = null;

try

{

// 接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接

socket = serverSocket.accept();

executorService.execute(new Handlers(socket));

//这里就是放业务逻辑的地方例如获取数据等等

} catch (Exception e)

{

e.printStackTrace();

System.out.println("socket Exception:" + e);

}

}

}

public static void main(String[] args) throws IOException

{

//Thread thread = new Thread(new PringtThread());

//thread.start();

new SocketServer().service();

}

}

端口扫描代码

import java.io.IOException;

import java点虐 .Socket;

public class SearchPort implements Runnable

{

public static void main(String[] args)

{

SearchPort searchPort = new SearchPort();

Thread thread = new Thread(searchPort);

thread.start();

}

@Override

public void run()

{

searchPort("192.168.1.2", 0, 9999);

}

public void searchPort(String ip,int begin, int end) {

// 1-65535

Socket s = null;

for (int i = begin; i  end; i++) {

boolean flag = false;

try {

s = new Socket(ip, i);

flag = s.isConnected();

} catch (IOException e) {

// TODO Auto-generated catch block

// e.printStackTrace();

}

if (flag) {

System.out.println("port " + i + " is open");

try {

s.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

// System.out.println("port " + i + " is close");

}

}

//System.out.println("seach port :" + begin + " to " + end + " ok..");

}

}

第一个端口监听的采用了线程池的技术,当大数据来的时候也不怕(某大型企业的部分源码),第二个例子是端口扫描器,采用了多线程扫描,代码直接复制就可以用的,从10点50分打代码11点半,不容易,望楼主采纳,有什么问题可以问我

请教大神,怎么使用java实现UDP端口扫描

给你个UDP服务端与客户端的示例:

服务端代码:

import java点虐 .DatagramPacket;

import java点虐 .InetAddress;

import java点虐 .MulticastSocket;

public class UDPMulticastServer {

final static int RECEIVE_LENGTH = 1024;

static String multicastHost = "224.0.0.1";

static int localPort = 9998;

public static void main(String[] args) throws Exception {

InetAddress receiveAddress = InetAddress.getByName(multicastHost);

if (!receiveAddress.isMulticastAddress()) {// 测试是否为多播地址

throw new Exception("请使用多播地址");

}

int port = localPort;

MulticastSocket receiveMulticast = new MulticastSocket(port);

receiveMulticast.joinGroup(receiveAddress);

boolean isStop = false;

while(!isStop){

DatagramPacket dp = new DatagramPacket(new byte[RECEIVE_LENGTH], RECEIVE_LENGTH);

receiveMulticast.receive(dp);

String data = new String(dp.getData()).trim(); 

System.out.println(data);

if("exit".equals(data)){

System.out.println("程序退出");

isStop = true;

}

}

receiveMulticast.close();

}

}

客户端代码:

import java点虐 .DatagramPacket;

import java点虐 .InetAddress;

import java点虐 .MulticastSocket;

public class UDPMulticastClient {

static String destAddressStr = "224.0.0.1";  

  

static int destPortInt = 9998;  

static int TTLTime = 4;  

public static void main(String[] args) throws Exception {  

InetAddress destAddress = InetAddress.getByName(destAddressStr);  

if(!destAddress.isMulticastAddress()){//检测该地址是否是多播地址  

 throw new Exception("地址不是多播地址");  

}  

int destPort = destPortInt;  

MulticastSocket multiSocket =new MulticastSocket();  

//     int TTL = TTLTime;  

//     multiSocket.setTimeToLive(TTL);  

byte[] sendMSG = "exit".getBytes();  

DatagramPacket dp = new DatagramPacket(sendMSG, sendMSG.length, destAddress  , destPort);  

multiSocket.send(dp);  

multiSocket.close();  

}  

}


文章标题:端口扫描java代码 端口扫描程序的设计与实现
文章路径:http://azwzsj.com/article/ddjphhe.html