直接上代码:
import java.net.Socketimport 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("关闭端口: " + i)
}
}
}
}
connect比较简单,就是用Socket+多线程,每个端口创建一次连接,没连上是不会往下执行的,会抛出异常,网上有源码,都是这个方法。syn和FIN还不知道咋实现,可以考虑用本地方法。