Java语言。编写一个端口扫描器(类似nmap的简易版本)。给定目的ip地址,可以扫描目的IP地址在哪个端口上可以接受tcp连接和udp连接。
时间: 2024-02-15 12:02:44 浏览: 188
好的,这是一个比较常见的网络编程问题。我可以给您提供一个简单的 Java 代码示例,实现基本的端口扫描器功能:
```java
import java.net.Socket;
import java.net.DatagramSocket;
public class PortScanner {
public static void main(String[] args) {
String ipAddress = "192.168.1.1"; // 目标IP地址
int timeout = 200; // 超时时间(毫秒)
int startPort = 1; // 起始端口号
int endPort = 65535; // 结束端口号
// 扫描TCP端口
System.out.println("Scanning TCP ports...");
for (int port = startPort; port <= endPort; port++) {
try {
Socket socket = new Socket(ipAddress, port);
System.out.println("TCP port " + port + " is open.");
socket.close();
} catch (Exception e) {
// 端口关闭或者无法连接
}
}
// 扫描UDP端口
System.out.println("Scanning UDP ports...");
for (int port = startPort; port <= endPort; port++) {
try {
DatagramSocket socket = new DatagramSocket(port);
socket.setSoTimeout(timeout);
byte[] buffer = new byte[10];
socket.receive(new DatagramPacket(buffer, buffer.length));
System.out.println("UDP port " + port + " is open.");
socket.close();
} catch (Exception e) {
// 端口关闭或者无法连接
}
}
}
}
```
这段代码使用了 Java 的 Socket 和 DatagramSocket 类来扫描 TCP 和 UDP 端口。它首先将目标 IP 地址、超时时间、起始和结束端口号设置为变量,然后使用 for 循环遍历所有端口,并尝试连接或接收数据包。如果连接成功或者数据包能够正常接收,则意味着该端口是开放的。
请注意,这只是一个简单的示例代码,可能无法处理一些特殊情况。在实际使用中,您可能需要进行更多的错误处理和性能优化。
阅读全文