主机不可达和端口不可达不都是连接不上嘛,会有什么区别呢?果真如此吗,我们来写个小程序来试试,在地址的位置上,我们第一次使用一个不存在的主机IP,第二次使用一个存在的主机IP,但端口不存在。
public static void main(String[] args) throws Exception
{
Socket socket = new Socket();
InetSocketAddress addr = new InetSocketAddress("121.14.0.29", 12345);
socket.connect(addr);
}
在Linux环境下,对于不存在的端口(主机是linux),程序马上就报连接错误,而对于主机不存在,非常地糟糕,运行了很就一直没有返回,为什么会有这种区别呢(windows的测试结果会不太一样,后面会有说明)?我们使用Ethereal抓包来看一下有什么区别:
1.端口不存在
很幸运,对于端口不存在,对方(linux)在IP层会直接发一个RST(Reset)响应直接终止掉连接,客户端直接把连接终止。在Windows环境下不太一样, 如果对方为Windows服务器,则不会回RST响应,这种情况下与主机不存在一致。
2.主机不存在
很不幸,在TPC/IP的Linux环境的实现中,客户端在连接请求包没有得到响应的时候,会不断进行重试(实现认为可能是丢包),时间间隔分别是2秒/6秒/12秒/25秒/50秒(指数级增长,到达50秒后会以这个频度重试,在本机测试的时候(Rethat Linux Enterprise V4)一直持续了3分9秒。这样当然非常地糟糕,所以在连接的时候设置一下超时时间是非常地重要滴(见下面)。在Windows环境下结果不太一样,Windows的TCP/IP实现上,客户端只会重试一次,间隔是10秒钟。
socket.connect(addr, 300); //设置超时时间为300豪秒
另外有一件非常奇怪的事情,就是不管是主机不存在还是端口不存在,网关和主机并不会返回主机不存在或端口不存在的ICMP消息
分享到:
相关推荐
无响应通常表示端口关闭,而ICMP端口不可达回应表示端口未监听。 - **半开扫描(SYN扫描)**:只发送SYN包,不完成三次握手,避免被目标主机识别为完整连接请求。 - **FIN扫描**、**XMAS扫描**、**NULL扫描**:...
没有响应可能表示端口关闭,而ICMP不可达消息可能表示被防火墙阻止。 3. **半开/ SYN扫描**:这种方法只进行TCP三次握手的一部分,发送SYN包后不发送ACK包,从而避免完全建立连接。如果目标主机响应SYN+ACK,但扫描...
如果抛出异常,如`java.net.ConnectException`,则端口可能被占用或不可达。 下面是一个简单的Java代码示例,用于扫描指定的TCP端口: ```java import java.io.IOException; import java.net.InetSocketAddress; ...
UDP扫描则发送无连接的数据包,如果端口开放,可能会收到一个ICMP端口不可达的响应。这个系统可能包含了这两种扫描方式,以全面了解网络状况。 系统产生的数据可能存储在"portScan_Log.LDF"和"portScan_Data.MDF"这...
1. **ICMP Unreachable扫描**:发送UDP数据包到目标端口,如果收到ICMP端口不可达消息,端口关闭;没有响应可能表示开放,也可能是过滤。 2. **NULL扫描**:发送无数据的UDP包,根据是否收到ICMP响应判断端口状态,...
你需要捕获并处理如网络连接超时、目标主机不可达等错误。 6. **并发扫描**:为了提高效率,可以使用多线程或多进程技术并行扫描多个端口。在C语言中,可以使用pthread库进行多线程编程。 7. **时间间隔控制**:...
3. **UDP扫描**:向目标端口发送UDP数据包,根据是否收到ICMP端口不可达消息或任何其他响应来判断端口状态。 4. **ICMP扫描**:扫描网络设备的ICMP服务,例如ping扫描,通过发送ICMP回显请求并观察是否收到回显应答...
- ICMP响应:当端口不可达时,可能会收到ICMP端口不可达或主机不可达的消息,这些信息可用于判断目标主机的状态。 - 错误处理:对超时、重定向、拒绝连接等错误进行妥善处理,确保扫描的连续性和完整性。 6. **...
(2) 若ping可达,则设计程序对目标主机进行端口扫描,显示常见端口的扫描结果,识别目标操作系统类型。 (3)使用多线程实现能同时扫描多台主机。设计程序对IP地址(单个IP,一段IP范围)、指定主机名的端口(指定...
3. **UDP扫描**:UDP是无连接的服务,扫描时向目标端口发送UDP数据包,根据是否收到ICMP不可达消息或特定的UDP响应来判断端口状态。UDP扫描适用于探测DNS、SNMP等服务。 4. **ICMP扫描**:针对ICMP协议,通过发送...
3. **UDP扫描**:对于UDP服务,工具会发送UDP数据包到目标端口,然后检查是否有ICMP端口不可达的回应,或者等待一段时间看是否有应答。 4. **半开扫描**:也叫FIN扫描,利用TCP协议的FIN标志来探测端口状态,通常...
如果连接失败,可能端口关闭或者主机不可达。 4. **处理异常**:由于网络通信中的各种不确定性,我们需要捕获可能发生的异常,如`SocketException`。这些异常可能意味着端口未开放、网络问题或者目标主机拒绝连接。...
3. **错误处理**:处理可能的网络异常,如连接失败、主机不可达等。 4. **权限和法律问题**:扫描他人的网络可能涉及隐私和安全问题,因此必须确保在合法范围内进行。 在提供的文件列表中,“局域网IP扫描”和...
若返回RST(复位)或无响应,则表明端口关闭或不可达。这种扫描方法称为半开扫描,因为它不需要完全建立连接,因此速度较快且相对隐蔽。 该工具的使用场景广泛,例如: 1. **网络审计**:定期扫描内部网络,发现...
如果收到ICMP端口不可达的错误,说明端口未打开。Java的DatagramPacket类可以用来发送和接收UDP数据包。 ```java import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPScanner { ...
3. UDP扫描:向目标发送UDP数据包,观察是否有ICMP不可达消息或超时情况来判断端口是否开放。 4. ICMP扫描:利用ICMP协议的特性,如回显请求(ping)和时间戳请求,探测目标的在线状态和防火墙规则。 5. NULL扫描、...
在端口扫描中,ICMP回显请求(ping)常用来测试目标主机的可达性,而ICMP端口不可达消息则可以帮助识别目标主机的开放端口。 在《计算机网络高级软件编程技术》第17章的综合扫描程序中,开发者可能会实现以下功能:...
7. **UDP扫描**:针对UDP协议,向目标发送UDP数据包,观察是否有ICMP端口不可达的回应,以此判断端口状态。 8. **安全与伦理**:端口扫描可能被视为非法活动,因为它可能被用来进行恶意探测。因此,进行端口扫描时...
UDP扫描时,如果端口未开放,通常会有ICMP端口不可达消息。 5. **记录和分析结果**:将扫描结果存储并进行分析,找出开放的端口和可能存在的服务。 6. **异常处理**:处理可能出现的网络错误,如超时、重试等。 在...
5. **网络问题**:如果服务器不可达或网络连接不稳定,也可能导致连接失败。确认网络连接正常,并确保可以访问邮件服务器。 6. **日志和调试**:增加JavaMail的日志级别可以帮助识别问题所在。可以使用`java.util....