7,9,13,17,19
这是几个简单的TCP/IP服务,在windows中被Simple TCP/IP Services管理。
7 : Echo 服务:将接收到的数据原样返回。
9 : Discard 服务:会丢弃所有接收到的数据,并且不返回任何数据。
13 : Daytime 服务:返回系统的时间。
17 : Quote of the Day 服务:每日一句。
19 : Character Generator 服务: 会发送一个字符序列,每个字符由一个字节表示。
java测试代码
点击展开/折叠代码块
public class SocketTest {
/**
* echo服务会将接收到的数据原样返回。
*/
@Test
@SneakyThrows
public void echoTest() {
String host = "localhost";
try (var s = new Socket(host, 7)) { // Echo 使用端口 7
s.setSoTimeout(5000);
try (OutputStream out = s.getOutputStream(); InputStream in = s.getInputStream()) {
String message = "Hello, Echo!";
out.write(message.getBytes(StandardCharsets.UTF_8));
out.flush();
byte[] buffer = new byte[1024];
int bytesRead = in.read(buffer);
String response = new String(buffer, 0, bytesRead, StandardCharsets.UTF_8);
System.out.println("Received: " + response);
}
}
}
/**
* Discard 服务会丢弃所有接收到的数据,并且不返回任何数据。为了验证这个服务,可以发送一些数据并观察没有响应。
*/
@Test
@SneakyThrows
public void discardTest() {
String host = "localhost";
try (var s = new Socket(host, 9)) { // Discard 使用端口 9
s.setSoTimeout(5000);
System.out.println("connect localhost Discard 9 port : " + s.isConnected());
try (OutputStream out = s.getOutputStream()) {
out.write("Test data".getBytes(StandardCharsets.UTF_8));
out.flush();
}
System.out.println("Data sent, no response expected.");
}
}
/**
* 获取daytime协议服务器的时间
*/
@Test
@SneakyThrows
public void socketTest() {
// String host = "time-a.nist.gov";
String host = "localhost";
try (var s = new Socket(host, 13)) {
s.setSoTimeout(5000);
try (var in = new Scanner(s.getInputStream(), StandardCharsets.UTF_8)) {
while (in.hasNextLine()) {
String line = in.nextLine();
System.out.println(line);
}
}
}
}
/**
* quote of the day,返回一句名言
*/
@Test
@SneakyThrows
public void quoteTest() {
String host = "localhost";
try (var s = new Socket(host, 17)) { // Quote of the Day 使用端口 17
s.setSoTimeout(5000);
try (var in = new Scanner(s.getInputStream(), StandardCharsets.UTF_8)) {
while (in.hasNextLine()) {
String line = in.nextLine();
System.out.println(line);
}
}
}
}
/**
* Character Generator 服务会发送一个字符序列,每个字符由一个字节表示。
*/
@Test
@SneakyThrows
public void characterGeneratorTest() {
String host = "localhost";
try (var s = new Socket(host, 19)) { // Character Generator 使用端口 19
s.setSoTimeout(5000);
try (var in = new Scanner(s.getInputStream(), StandardCharsets.UTF_8)) {
for (int i = 0; i < 10 && in.hasNextLine(); i++) {
String line = in.nextLine();
System.out.println(line);
}
}
}
}
}
53
53 端口是 DNS(域名系统)使用的标准端口,支持 UDP 和 TCP 协议。DNS 是将网站域名(如 example.com)转换为 IP 地址(如 93.184.216.34)的服务。UDP 用于普通查询,TCP 用于区域传输(zone transfer)等较大数据交互。
如果设备对外开放了 53 端口,可能意味着它正在运行一个 DNS 服务器。应当避免无意中对外暴露 DNS 服务,防止被滥用进行 DNS 放大攻击。
135
135端口主要用于Microsoft的远程过程调用(RPC)服务。RPCSS(Remote Procedure Call Subsystem) 服务是 COM 和 DCOM 服务器的服务控制管理器。它执行 COM 和 DCOM 服务器的对象激活请求、对象导出程序解析和分布式垃圾回收。如果此服务被停用或禁用,则使用 COM 或 DCOM 的程序将无法正常工作。强烈建议你运行 RPCSS 服务。
139
139 端口是用于 NetBIOS Session Service(网络基本输入输出系统会话服务)的端口,基于 TCP 协议。它是早期 Windows 局域网文件和打印共享服务(SMB over NetBIOS)的组成部分。
如果此端口对外开放,攻击者可能会尝试进行信息枚举、密码爆破甚至远程代码执行等攻击。出于安全考虑,在现代网络中应避免暴露 139 端口,尤其是在公共或互联网环境下。
445
445 端口 是现代 Windows 网络共享和远程文件访问使用的主要端口,服务于 SMB(Server Message Block)协议的直接 TCP 通信(即 SMB over TCP)。它允许计算机之间进行文件共享、打印服务和远程管理等操作。
许多严重漏洞(如 WannaCry 勒索病毒)都曾利用该端口攻击。除非你确实需要它(如内网共享),强烈建议关闭对外 445 端口,或在防火墙中加以限制。
3389
3389端口是Windows 的远程桌面连接(Remote Desktop Protocol,RDP)使用的默认端口。远程桌面允许你使用远程桌面客户端(适用于Windows、Android、iOs和 macOs)从远程设备连接到这台电脑并加以控制。这样,你就可以通过其他设备工作,如同直接在这台电脑上工作一样。
5357端口
5357端口通常用于Microsoft Windows的WS-Discovery(Web Services Dynamic Discovery)。这是一个用于网络设备自动发现的协议,特别是在局域网内使用。这意味着某些Windows设备可能会在这个端口上进行广播,以便发现和识别同一网络中的其他设备。
要关闭端口5357上的WS-Discovery服务,可以通过禁用相关服务来实现。以下是步骤:
通过服务管理器禁用 WS-Discovery 服务
打开服务管理器:
按 Windows + R,输入 services.msc,然后按回车。
找到并禁用服务:
在服务列表中找到名为 Function Discovery Resource Publication 和 SSDP Discovery 的服务。
对每个服务右键单击,选择“属性”。
将“启动类型”设置为“禁用”。
如果服务正在运行,点击“停止”。