端口存活判断(TCP connect、TCP SYN、TCP FIN和UDP的区别)

TCP connect(全连接)

  • 扫描器会向服务器目标端口发送TCP包进行连接,如果服务器端口是开放的会进行TCP连接和TCP三次握手,这也称为全连接。如果服务器的端口是关闭的,则不会进行连接。
优点:1.TCP连接可靠,当出现丢包时会重新发送SYN帧。2.因为进行TCP全连接,所以测试相对准确。
缺点:扫描的时间较长,容易被目标主机发现。

TCP SYN(半连接)

  • 扫描器会向服务器目标端口发送SUN数据帧,服务器开放的端口会回复SYN+ACK数据包,如果扫描器收到SYN+ACK数据包,说明此端口开放,否则端口是关闭的。
优点:1.半连接,速度快。2.相对TCP connect来说,更可能会收到服务器的应答包。
缺点:1.大量半连接容易被发现。2.可能会丢包。3.半连接,可能影响后面测试结果的准确性。

TCP FIN(终止连接)

  • TCP通常是四次握手,第四次握手是终止连接请求(TCP FIN),当扫描器直接发送FIN帧给服务器一个非监听的端口时,会有RST应答。反之,发发送给一个正在监听的端口时,则不会有任何回应。
优点:隐蔽性好;速度快。
缺点:1.存在误判:丢包也会造成收不到应答。2.可测试linux系统,无法测试windows系统,因为windows,无论端口是否监听,都将回应RST帧,无法判断。

UDP

  • 扫描器会发送UDP ICMP包到服务器端口,如果端口是开放的,则没有响应。如果端口是关闭的,对方会回复一个ICMP端口不可达报文的包。
优点:linux windows都能用。
缺点:1.相对于TCP的FIN,SYN扫描要慢一些。2.如果发送的UDP包太快了,会出现大量丢失的现象。3.速度相对于TCP的FIN,SYN扫描会慢一些。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
好的,关于Java实现UDPTCP端口扫描,我可以给您提供一些思路和代码示例。 UDP端口扫描: UDP端口扫描需要发送UDP数据包并等待响应,如果没有响应或者收到错误响应,则认为该端口未开放。 代码示例: ```java import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPPortScanner { public static void main(String[] args) { String host = "127.0.0.1"; int timeout = 1000; // 设置超时时间 int startPort = 1; int endPort = 1024; for (int port = startPort; port <= endPort; port++) { try { DatagramSocket socket = new DatagramSocket(); socket.setSoTimeout(timeout); InetAddress address = InetAddress.getByName(host); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); socket.send(sendPacket); socket.receive(receivePacket); System.out.println("UDP port " + port + " is open."); socket.close(); } catch (Exception e) { // 端口未开放 } } } } ``` TCP端口扫描: TCP端口扫描需要建立TCP连接并发送一些数据,如果连接建立成功并且收到了正确的响应,则认为该端口已开放。 代码示例: ```java import java.net.InetAddress; import java.net.Socket; public class TCPPortScanner { public static void main(String[] args) { String host = "127.0.0.1"; int timeout = 1000; // 设置超时时间 int startPort = 1; int endPort = 1024; for (int port = startPort; port <= endPort; port++) { try { Socket socket = new Socket(); socket.connect(new InetSocketAddress(host, port), timeout); System.out.println("TCP port " + port + " is open."); socket.close(); } catch (Exception e) { // 端口未开放 } } } } ``` 以上是Java实现UDPTCP端口扫描的示例代码,希望能对您有所帮助。由于网络安全的原因,建议不要在未经授权的情况下扫描他人的主机。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高木正雄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值