Linux如何检查远程服务器中端口是否打开?

Linux如何检查远程服务器中端口是否打开?,第1张

这个非常简单,telnet、nc和nmap这3个命令就可以轻松实现,下面我简单介绍一下实现过程,感兴趣的朋友可以自己尝试一下:

telnet

这是基于telnet协议实现的一个远程登录命令,可以直接用于测试远程Linux服务器是否开启指定端口,安装的话,输入命令“yum install -y telnet”(或者“apt install -y telnet”)就行,使用方式“telnet 服务器IP地址 端口号”,如下,这里以端口22为例,如果返回结果为Connected,则说明端口开启,如果为refused,则说明端口关闭:

nc

也即netcat,一个简单实用的Unix(Linux)工具,主要用来读写网络间连接的数据,可以很方便的查看远程Linux服务器是否开启指定端口,如下,这里以3306端口为例,如果返回结果为Connected,则说明端口开启,如果为timed out,则说明端口关闭:

更多参数和说明的话,可以使用命令“nc -h”进行查看,官方文档解释的非常清楚详细,如下:

nmap

这是一个专门用于网络嗅探的工具,在渗透测试中经常会用到,也可以很方便的查看远程Linux服务器是否开启指定端口,安装的话,输入命令“yum install -y nmap”(或者“apt install -y nmap”)就行,如下,这里以80,21,3306这3个端口为例,如果返回结果为open,则说明端口开启,如果为filtered,则说明端口关闭:

更多参数和功能的话,可以使用帮助命令“nmap -h”进行查看,官方文档解释的非常详细清楚,一目了然,如下:

至此,我们就介绍完了使用telnet、nc和nmap这3个命令来查看远程Linux服务器是否开启指定端口。总的来说,这3种方式都非常简单,只要你有一定的Linux基础,熟悉一下相关参数和说明,很快就能掌握的,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。

方法一,telnet host port

方法二,nc -t host port 其中-t代表tcp,-u是udp

方法三,任意语言,优先python,写一段 socket程序,调用connect函数看看是否成功

ping一下ip地址加上你想要的端口,就知道端口打开没有

1 ss命令简介

ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。

ss命令简介

2 常用选项

-h, --help 帮助

-V, --version 显示版本号

-t, --tcp 显示 TCP 协议的 sockets

-u, --udp 显示 UDP 协议的 sockets

-x, --unix 显示 unix domain sockets,与 -f 选项相同

-n, --numeric 不解析服务的名称,如 "22" 端口不会显示成 "ssh"

-l, --listening 只显示处于监听状态的端口

-p, --processes 显示监听端口的进程(Ubuntu 上需要 sudo)

-a, --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接

-r, --resolve 把 IP 解释为域名,把端口号解释为协议名称

3 常见用法

如果不添加选项 ss 命令默认输出所有建立的连接(不包含监听的端口),包括 tcp, udp, and unix socket 三种类型的连接:

31 查看前5名的连接:

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port

u_str ESTAB 0 0 20040 20041

u_str ESTAB 0 0 20030 20031

u_str ESTAB 0 0 20044 20043

u_str ESTAB 0 0 /run/dbus/system_bus_socket 18592 18591

32 查看主机的监听端口

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 127001:9016 :

LISTEN 0 128 127001:9017 :

LISTEN 0 100 127001:25 :

LISTEN 0 128 127001:9018 :

LISTEN 0 128 127001:1723 :

LISTEN 0 128 127001:9019 :

33 linux查看tcp连接

ESTAB 0 0 ::1:ssh ::1:53238

ESTAB 0 0 ::1:53278 ::1:ssh

ESTAB 0 0 ::1:ssh ::1:53280

ESTAB 0 0 ::1:53288 ::1:ssh

ESTAB 0 0 ::1:ssh ::1:53296

ESTAB 0 0 ::1:53294 ::1:ssh

ESTAB 0 0 ::1:48456 ::1:ssh

ESTAB 0 0 ::1:53286 ::1:ssh

ESTAB 0 0 ::1:53292 ::1:ssh

ESTAB 0 0 ::1:ssh ::1:53272

linux查看tcp连接

34 解析IP和端口号

使用-r选项

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 my_public_ip:9016 :

LISTEN 0 128 my_public_ip:9017 :

LISTEN 0 100 localhost:smtp :

LISTEN 0 128 my_public_ip:9018 :

LISTEN 0 128 my_public_ip:pptp :

LISTEN 0 128 my_public_ip:9019 :

linux查看监听端口

35 输出时带进程名称

使用-p选项

Total: 2340 (kernel 2365)

TCP: 2126 (estab 72, closed 23, orphaned 1, synrecv 0, timewait 2/0), ports 0

Transport Total IP IPv6

36 根据条件过滤输出结果

可以通过语法过滤输出结果,根据源IP、源端口、目标IP、目标端口

src源

dst目标

ss dst 172162633

ss dst 172162643:http

ss dst 172162643:443

37 根据源端口号范围输出:

根据目标端口号范围输出:

ss dport OP PORT

OP 可以代表以下任意一个:

<=le小于或等于某个端口号 >=ge大于或等于某个端口号==eq等于某个端口号!=ne不等于某个端口号>gt大于某个端口号<lt小于某个端口号

比如:

输出源端口号小于8080的连接状态

或者

38 根据TCP 的状态进行过滤

ss命令还可以根据TCP连接的状态进行过滤,支持的 TCP 协议中的状态有:

established

syn-sent

syn-recv

fin-wait-1

fin-wait-2

time-wait

closed

close-wait

last-ack

listening

closing

除了上面的 TCP 状态,还可以使用下面这些状态:

状态输出结果 all输出所有TCP状态。connected输出已经建立连接的TCP状态。synchronized输出同步状态的连接。bucket输出maintained的状态,如:time-wait 和 syn-recv。big输出与bucket相反的状态。

只输出ipv4状态:

只输出ipv6状态:

输出ipv4监听状态:

39 根据TCP状态和端口号进行过滤

输入出ipv4协议下的ssh监听状态:

或者

要么使用转义小括号,要么使用单引号

查看所有已经建立TCP三次握手的HTTP连接:

查看所有正在进程的ssh连接:

4 总结

ss 命令功能丰富并且性能出色,完全可以替代 netsate 命令。已经成为我们日常查看 socket 相关信息的利器。未来netstat已经慢慢被ss取代。

https://wwwlinuxrumencom/cyml/821html

Linux查看服务的端口号,参考命令如下:

netstat -anltp|grep  server_name

以上,请使用查看的服务名称来替换server_name

Linux怎么查看端口是否开启?我们一起来了解一下吧。

首先我们先打开要查看端口的Linux的命令操作界面,

然后为了能够获得更高的权限,切换root用户登录

第一个方法就是使用lsof-i:端口号命令行,以80为例的,

如果没有任何输出则说明没有开启该端口号,为了方便测试,我这里检测一个开启的端口号,则会输出如图所示的信息

第二个方法就是使用netstat-aptn命令行,查看所有开启的端口号,

本文章基于ThinkpadE15品牌、centos7系统撰写的。

前言

如何确定端口是否在Linux或类unix系统下占用怎么检查哪些端口正在Linux服务器上被占用Linux系统如何使用命令行检查端口是否已经在占用

查询哪些端口正在服务器的网络接口上被占用是非常重要的工作。您需要查询打开端口以检测入侵。除了入侵之外,出于故障排除的目的,可能有必要检查服务器上的其他应用程序是否已经使用了某个端口。例如,您可以在同一系统上安装Apache和Nginx服务器。因此,有必要了解Apache或Nginx是否使用TCP端口80或443。本教程提供了使用netstat、nmap和lsof命令查询正在使用的端口并查看正在使用该端口的应用程序的步骤。

如何查询端口是否在使用中:

检查Linux上被占用的端口和应用程序:

Step1: 打开终端

Step2: 执行以下任意一条命令查看被占用的端口

查看端口22是否被占用:

较新版本的Linux使用以下查询命令:

方法1: 使用lsof命令查询占用端口

先安装lsof命令

RHEL/CentOS系统:

Debian/Ubuntu系统安装lsof命令

使用语法如下

OpenBSD

看到类似这样的输出结果:

sshd是进程名字

TCP 22表示sshd进程占用了TCP 22端口,正在监听中(LISTEN)

1243表示sshd进程号

方法二:使用netstat查询被占用的端口号

较新的Linux发行版已经不再默认集成netstat命令,而是使用新命令ss取代了。

如果要使用netstat命令,需要手动安装net-tools套件:

RHEL/CentOS系统安装net-tools套件,执行以下命令:

Debian/Ubuntu系统执行以下命令:

您可以使用netstat查询被占用的端口和应用程序,如下所示。

执行以下命令查询:

在Linux上,netstat命令已经废弃了一段时间。因此,你需要使用ss命令如下:

或者:

其中ss命令选项如下:

-t : 只显示Linux上的TCP套接字

-u : 在Linux上只显示UDP套接字

-l : 监听套接字。例如,TCP端口22由SSHD服务器打开。

-p : 列出打开套接字的进程名

-n : 不要解析服务名称,即不要使用DNS

FreeBSD/MacOS X netstat 语法

FreeBSD/MacOS X查询被占用的端口

或者

OpenBSD netstat 语法

OpenBSD查询被占用的端口

或者

方法三:使用`nmap`命令查询Linux被占用的端口

默认情况下,Linux发行版并没有默认安装nmap命令,

CentOS系统安装nmap

Ubuntu系统安装nmap

使用nmap查询本机被占用的端口

查询Linux系统被占用的UDP端口

查询Linux系统被占用的TCP端口

你可以同时查询被占用的TCP和UDP端口

结论:

本教程解释了如何在Linux系统上使用命令行查询TCP或者UDP端口是否被占用。有关更多信息,请参见nmap命令和lsof命令页面

在Linux中查找服务的端口

方法1:使用grep命令

要使用grep命令在Linux中查找指定服务的默认端口号,只需运行:

$grep<port>/etc/services

例如,要查找SSH服务的默认端口,只需运行:

$grep ssh/etc/services

就这么简单。此命令应该适用于大多数Linux发行版。以下是我的Arch Linux测试机中的示例输出:

ssh 22/tcp

ssh 22/udp

ssh 22/sctp

sshell 614/tcp

sshell 614/udp

netconf-ssh 830/tcp

netconf-ssh 830/udp

sdo-ssh 3897/tcp

sdo-ssh 3897/udp

netconf-ch-ssh 4334/tcp

snmpssh 5161/tcp

snmpssh-trap 5162/tcp

tl1-ssh 6252/tcp

tl1-ssh 6252/udp

ssh-mgmt 17235/tcp

ssh-mgmt 17235/udp

正如你在上面的输出中所看到的,SSH服务的默认端口号是22。

让我们找到Apache Web服务器的端口号。为此,命令是:

$grep http/etc/services

#http://wwwianaorg/assignments/port-numbers

http 80/tcp www www-http#WorldWideWeb HTTP

http 80/udp www www-http#HyperText Transfer Protocol

http 80/sctp#HyperText Transfer Protocol

https 443/tcp#http protocol over TLS/SSL

https 443/udp#http protocol over TLS/SSL

https 443/sctp#http protocol over TLS/SSL

gss-http 488/tcp

gss-http 488/udp

webcache 8080/tcp http-alt#WWW caching service

webcache 8080/udp http-alt#WWW caching service

[]

FTP端口号是什么?这很简单!

$grep ftp/etc/services

ftp-data 20/tcp

ftp-data 20/udp

#21 is registered to ftp,but also used by fsp

ftp 21/tcp

ftp 21/udp fsp fspd

tftp 69/tcp

[]

方法2:使用getent命令

如你所见,上面的命令显示指定搜索词“ssh”、“http”和“ftp”的所有端口名称和数字。这意味着,你将获得与给定搜索词匹配的所有端口名称的相当长的输出。

但是,你可以使用getent命令精确输出结果,如下所示:

$getent services ssh

ssh 22/tcp

$getent services http

http 80/tcp www www-http

$getent services ftp

ftp 21/tcp

如果你不知道端口名称,但是知道端口号,那么你只需将端口名称替换为数字:

$getent services 80

http 80/tcp

要显示所有端口名称和端口号,只需运行:

$getent services

常常看到有些人想要知道自己的Linux主机到底开放了多少Port?要如何来检测呢。通常我们知道的Port有下面这几个:

ftp:21

telnet:23

smtp:25

http:80

pop-3:110

netbios-ssn:139

squid:3128

mysql:3306

端口当然不只这些个,如何知道Port是否被开启呢?

检测你开启的服务有哪些?使用功能强大的 netstat 指令。

在做为服务器的Linux系统中,服务项目是越少越好!这样可以减少避免不必要的入侵通道。要了解自己的系统当中的服务项目,最简便的方法就是使用nestat 了!这个命令不但简单(是每一个Linux系统都会安装的套件!),而且功能也是很不错的,例如我们在检查WWW使用者的人数时,就很需要这个命令!好了,我们来看一下netstat 的使用方法:

复制内容到剪贴板

代码:

[root@localhost ~]# netstat

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address Stat e

tcp 0 0 ::ffff:1921681178:ssh ::ffff:1921681175:4235 ESTA BLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags Type State I-Node Path

unix 10 [ ] DGRAM 4701 /dev/log

unix 2 [ ] DGRAM 5846 @/var/run/hal/hotplug_s ocket

unix 2 [ ] DGRAM 2901 @udevd

unix 3 [ ] STREAM CONNECTED 5845 /var/run/dbus/system_bu s_socket

unix 3 [ ] STREAM CONNECTED 5844

unix 3 [ ] STREAM CONNECTED 5792 /var/run/dbus/system_bu s_socket

unix 3 [ ] STREAM CONNECTED 5791

unix 3 [ ] STREAM CONNECTED 5724

unix 3 [ ] STREAM CONNECTED 5723

如上所示,单纯使用 netstat 的时候,仅 列出目前已经连通的服务与服务名称。所以你可以看到,由于目前仅有一个ssh连接成功,所有就只显示出一个 ESTABLISHED(连接中的意思)。 上面的 :

复制内容到剪贴板

代码:

tcp 0 0 ::ffff:1921681178:ssh ::ffff:1921681175:4235

这一行表示有一个SSH的服务开放,是由远端的 1921681175这个IP连接到 1921681178 的。而连接的端口是4235。那如果我需要将所有的项目列出来呢?

复制内容到剪贴板

代码:

[root@localhost ~]# netstat -a

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address Stat e

tcp 0 0 :32768 : LIST EN

tcp 0 0 :sunrpc : LIST EN

tcp 0 0 :auth : LIST EN

tcp 0 0 localhostlocaldomain:ipp : LIST EN

tcp 0 0 localhostlocaldomain:smtp : LIST EN

tcp 0 0 :ssh : LIST EN

tcp 0 0 ::ffff:1921681178:ssh ::ffff:1921681175:1237 ESTA BLISHED

udp 0 0 :32768 :

udp 0 0 :955 :

udp 0 0 :sunrpc :

udp 0 0 :ipp :

如上所示,加入 -a(all)就可以了。将所有在机器上 (监听 Listem)或者是(已建立连接的)的服务通通列出的意思。不过,服务的名称已经使用 /etc/services 里面的名称了,而不是使用 port 的数字!目前我主机上面的服务共开放了:sunrpc、auth、ssh、ipp、smtp等服务(就是 Listen的那几个服务)至于已经建立的服务就只有 SSH 这一个!那如果我想知道开放了哪些端口号呢?呵呵,就使用下面的命令吧!

复制内容到剪贴板

代码:

[root@localhost ~]# netstat -an

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0000:32768 0000: LISTEN

tcp 0 0 0000:111 0000: LISTEN

tcp 0 0 0000:113 0000: LISTEN

tcp 0 0 127001:631 0000: LISTEN

tcp 0 0 127001:25 0000: LISTEN

tcp 0 0 :::22 ::: LISTEN

tcp 0 52 ::ffff:1921681178:22 ::ffff:1921681175:1237 ESTABLISHED

udp 0 0 0000:32768 0000:

udp 0 0 0000:955 0000:

udp 0 0 0000:111 0000:

udp 0 0 0000:631 0000:

如上所示,我接通的服务只有22这一个,而其它的你可以参照上面的命令输出结果来对照,所以你就可以知道:smtp为25端口。因此,通过使用此命令,就可以轻易的子解目前主机的运作状况与服务状态了。当然了,netstat的用途不止于此,你可以使用 man netstat 来查阅一番喔!相信对你的主机会有更大的了解。

相信有不少的朋友都会有这个困扰,就是要怎样删除已经建立的联机呢?因为总有些不速之客会连到您的主机来进行一些破坏的工作!或者是您根本不想让对方联机过来!呵呵!还记得 鸟哥的 Linux 私房菜--基础学习篇内的资源管理 里面提到的几个常用的指令吧!?那就是找出那个联机程序的 PID ,然后给他 kill 掉就是了!简单呀!不过,大问题是『我要怎样找出联机的 PID 呀!?』呵呵!由于 PID 的管理与整体的系统资源有关,这个时候,虽然可以使用 netstat 来观察 PID ,不过只有 root 可以观察到联机状态的 PID 号码呦!( 注:还记得资源管理提及的 PID 概念吗?就是说,在 Linux 系统之内,每个『程序』系统都会给予一个号码来管理!这个就是 PID 啰!)

 

复制内容到剪贴板

代码:

[root@test root]# netstat -ap

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 :ssh : LISTEN 32149/sshd

tcp 0 284 14011614119:ssh 192168111:1391 ESTABLISHED 24751/sshd

Active UNIX domain sockets (servers and established)

Proto RefCnt Flags Type State I-Node PID/Program name Path

unix 7 [ ] DGRAM 944 509/syslogd /dev/log

unix 2 [ ] DGRAM 3035915 16648/xinetd

unix 2 [ ] DGRAM 739227 5951/pppoe

unix 2 [ ] DGRAM 739189 5949/pppd

unix 2 [ ] DGRAM 1070 628/crond

unix 2 [ ] DGRAM 953 514/klogd

unix 2 [ ] STREAM CONNECTED 690 1/init [3]

 

看到上面那个斜体字的联机建立的网络状态了吗?嘿嘿!最后面一栏就是显示那个 PID/Program name ,那个 PID ( 上面是 24751 )也就是我们要来砍掉的啦!这个时候,如果要将该联机砍掉时,就直接以 kill 来做吧!

 

复制内容到剪贴板

代码:

[root@test root]# kill -9 24751

 

这样就能将该联机给他『踢出去』您的主机啦!! ^_^""

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Linux如何检查远程服务器中端口是否打开?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情