如何判断远端主机UDP端口是否开启

news/2024/10/25 20:23:43/

一、服务端TCP监听端口

如果是tcp作为监听端口,很多人里面可以想到相应的方法,由于tcp三次握手协议,我们可以直接写一个客户端程序即可判断tcp端口是否监听。我们汇总几种方法:
1.tcp socket客户端编程
直接调用connect接口(unix),建链远端地址和端口,建链成功:在监听port;建链拒绝:表示未在监听
2.telnet命令
client:

[root@Node_B build]# telnet 10.228.113.185 8000
Trying 10.228.113.185...
Connected to 10.228.113.185 (10.228.113.185).
Escape character is '^]'.
ss
Hello,you are connected!

server:

[root@localhost test]# ./tcp_server
======waiting for client's request======
recv msg from client: ss

如果拒绝:

[root@Node_B build]# telnet 10.228.113.185 8001
Trying 10.228.113.185...
telnet: connect to address 10.228.113.185: Connection refused
telnet: Unable to connect to remote host: Connection refused

3.nc命令
client:

[root@Node_B build]# nc -vz 10.228.113.185 8000
Connection to 10.228.113.185 8000 port [tcp/irdmi] succeeded!

在这里插入图片描述
如果拒绝:

[root@Node_B build]# nc -vz 10.228.113.185 8001
nc: connect to 10.228.113.185 port 8001 (tcp) failed: Connection refused

二、服务端UDP监听端口

相对于TCP,UDP无法通过三次握手来判断端口是否启用,connect 接口链接UDP套接字和远端主机UDP绑定的地址和端口,无论远端是否绑定,connect均可以链接成功,同时 telnet也仅适用于TCP。
我们只能通过nc命令来判断。
我们做一个实验:
1)在服务端我们启用一个10.228.113.185,端口8888的udp端口
client:

[root@Node_B build]# nc -uvz 10.228.113.185 8888
Connection to 10.228.113.185 8888 port [udp/ddi-udp-1] succeeded!

server:

[root@localhost test]# ./udp_server
client:X
server:I have recieved 1 bytes data!client:X
server:I have recieved 1 bytes data!client:X
server:I have recieved 1 bytes data!client:X
server:I have recieved 1 bytes data!client:X
server:I have recieved 1 bytes data!

在这里插入图片描述
1.如果udp监听端口开启,在监听范围,就不会回复ICMP包
2.netcat会连续相监听端口发送五个探测包,udp报文数据区带一个字符’X’
3.如果没有收到目标主机的回复,netcat认为远端监听的端口开启

2)我们用nc探测没有开启服务的端口
client:

[root@Node_B build]# nc -uvz 10.228.113.185 8887

在这里插入图片描述
netcat向服务端发送了两个udp探测报文,远端立即回复了ICMP的报文,端口不可达

3)nc探测一个链路不通的端口

[root@Node_B build]# ping 10.228.113.186
PING 10.228.113.186 (10.228.113.186) 56(84) bytes of data.
From 10.228.113.90 icmp_seq=2 Destination Host Unreachable
From 10.228.113.90 icmp_seq=3 Destination Host Unreachable
From 10.228.113.90 icmp_seq=4 Destination Host Unreachable
From 10.228.113.90 icmp_seq=6 Destination Host Unreachable
From 10.228.113.90 icmp_seq=7 Destination Host Unreachable
From 10.228.113.90 icmp_seq=8 Destination Host Unreachable
^C
--- 10.228.113.186 ping statistics ---
9 packets transmitted, 0 received, +6 errors, 100% packet loss, time 8946ms
pipe 3
[root@Node_B build]# nc -uvz 10.228.113.186 8888
Connection to 10.228.113.186 8888 port [udp/ddi-udp-1] succeeded!

从实验来看,对端链路不通,但是nc工具任然认为8888端口开启,实际上我们无法确认对端是否开启,这就是这个nc工具的小bug,上面我们也说到如果没有收到目标主机的回复,netcat认为远端监听的端口开启,由于链路不通,这里也分两种情况:
1.如果nc探测的地址是在同一个子网下面,但是远端地址和本机不通,通过抓包发现,实际都没有发出来任何一个探测包,由于底层失败对端是同一个子网,但是学不到mac,所以没有发出任何报文
2.如果nc探测的地址不是在同一个子网下面,通过抓包发现,可以发出五个探测报文,由于不在一个网段,直接走默认网关,所以可以发出来探测报文。
在这里插入图片描述
4)nc+ping+traceroute组合使用来判断UDP监听端口
经过上面的一系列实验,发现使用nc工具探测udp监听端口,必须确保两个设备链路是否通畅,但是ping 包均是 ICMP 报文,即使链路正常,还是不能保证百分之百保证UDP报文一定能到达对端,因为还有极少数的路由器或者一些防火墙设备可能会丢去一些端口较大的 UDP 报文。因此,此时还要借助 traceroute 判断 UDP 包是否到达了远端主机。

三、nc工具常用方法

1、远程拷贝文件
从server1拷贝文件到server2上。需要先在server2上,,用nc激活监听,

server2上运行: nc -l 1234 > text.txt
server1上运行: nc 192.168.10.11 1234 < text.txt

注:server2上的监听要先打开

2、克隆硬盘或分区
操作与上面的拷贝是雷同的,只需要由dd获得硬盘或分区的数据,然后传输即可。
克隆硬盘或分区的操作,不应在已经mount的的系统上进行。所以,需要使用安装光盘引导后,进入拯救模式(或使用Knoppix工具光盘)启动系统后,在server2上进行类似的监听动作:

 nc -l -p 1234 | dd of=/dev/sda

server1上执行传输,即可完成从server1克隆sda硬盘到server2的任务:

 dd if=/dev/sda | nc192.168.10.11 1234

※ 完成上述工作的前提,是需要落实光盘的拯救模式支持服务器上的网卡,并正确配置IP。

3、端口扫描
可以执行:

 nc -v -w 2 192.168.10.11 -z 21-24
nc: connect to 192.168.10.11 port 21 (tcp) failed: Connection refused
Connection to 192.168.10.11 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.10.11 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.10.11 port 24 (tcp) failed: Connection refused 

-z后面跟的是要扫描的端口
4、保存Web页面

while true; do nc -l -p 80 -q 1 < somepage.html; done

5、模拟HTTP Headers

引用[root@hatest1 ~]# nc 80
GET / HTTP/1.1
Host: ispconfig.org
Referrer: mypage.com
User-Agent: my-browserHTTP/1.1 200 OK
Date: Tue, 16 Dec 2008 07:23:24 GMT
Server: Apache/2.2.6 (Unix) DAV/2 mod_mono/1.2.1 mod_python/3.2.8 Python/2.4.3 mod_perl/2.0.2 Perl/v5.8.8
Set-Cookie: PHPSESSID=bbadorbvie1gn037iih6lrdg50; path=/
Expires: 0
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Set-Cookie: oWn_sid=xRutAY; expires=Tue, 23-Dec-2008 07:23:24 GMT; path=/
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html
[......]

在nc命令后,输入红色部分的内容,然后按两次回车,即可从对方获得HTTP Headers内容。

6、聊天
nc还可以作为简单的字符下聊天工具使用,同样的,server2上需要启动监听:

server2上启动:# nc -l 1234 
server1上传输:# nc 192.168.10.11 1234

这样,双方就可以相互交流了。使用Ctrl+D正常退出。

7、传输目录
从server1拷贝nginx-0.6.34目录内容到server2上。需要先在server2上,用nc激活监听,

server2上运行:# nc -l 1234 |tar xzvf -
server1上运行:# tar czvf - nginx-0.6.34|nc 192.168.10.11 123

8、用nc命名操作memcached

1)存储数据:printf “set key 0 10 6rnresultrn” |nc 192.168.10.11 11211
2)获取数据:printf “get keyrn” |nc 192.168.10.11 11211
3)删除数据:printf “delete keyrn” |nc 192.168.10.11 11211
4)查看状态:printf “statsrn” |nc 192.168.10.11 11211
5)模拟top命令查看状态:watch “echo stats” |nc 192.168.10.11 11211
6)清空缓存:printf “flush_allrn” |nc 192.168.10.11 11211 (小心操作,清空了缓存就没了)

http://www.ppmy.cn/news/319154.html

相关文章

Docker Stack 学习笔记

一、简介 Docker Stack 是为了解决大规模场景下的多服务部署和管理&#xff0c;提供了期望状态&#xff0c;滚动升级&#xff0c;简单易用&#xff0c;扩缩容&#xff0c;健康检查等特性&#xff0c;并且都封装在一个声明式模型当中。 Docker Stack 部署应用的生命周期&#…

SpringCloud(七)

Hystrix 什么是Hystrix Hystrix是一个用于处理分布式系统延迟和容错的开源库&#xff0c;在分布式系统中&#xff0c;许多依赖不可避免的会调用失败&#xff0c;比如超时&#xff0c;异常等&#xff0c;Hystrix能保证在一个依赖出现问题的情况下&#xff0c;不会导致整体服务失…

Django+xadmin打造在线教育平台(七)

目录 在线教育平台&#xff08;一&#xff09; 在线教育平台&#xff08;二&#xff09; 在线教育平台&#xff08;三&#xff09; 在线教育平台&#xff08;四&#xff09; 在线教育平台&#xff08;五&#xff09; 在线教育平台&#xff08;六&#xff09; 在…

新ingress-kong安装(ingress-kong konga postgres)

Kong是一款基于OpenResty&#xff08;Nginx Lua模块&#xff09;编写的高可用、易扩展的&#xff0c;由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的 在k8s集群内部创建kong网关 kong-ingress.yaml apiVersion: v1 kind: Names…

Linux第一本书 第四章 Linux系统中的用户管理

一、用户及用户组存在的意义 用户存在的意义 系统中每个文件归一个特定的用户所有&#xff0c;对文件和目录的访问受到用户的限制。如果没有用户系统的文件和目录的访问将会杂乱无章&#xff0c;随着这些杂乱无章的访问&#xff0c;系统的安全将会受到很大威胁。所以设置用户…

Tanzu学习系列之TKGm 1.4 for vSphere 组件集成(四)

Harbor Registry&#xff08;又称Harbor云原生制品仓库或Harbor镜像仓库&#xff09;由VMware公司中国研发中心云原生实验室原创&#xff0c;并于2016年3月开源。Harbor在Docker Registry的基础上增加了企业用户必需的权限控制、镜像签名、安全漏洞扫描和远程复制等重要功能&am…

<Ⅳ>Linux系统中的用户管理2021-10-3

一、用户及用户组存在的意义 1.用户存在的意义 系统资源是有限的&#xff0c;如何合理分配系统资源&#xff1f; 在这个问题解决时必须要有两个资源配合 1&#xff09;身份 account 2&#xff09;授权 author 3&#xff09;认证 auth 3A 机制&#xff0c;3A 机制组成系统中最…

GPGGA NTRIP RTCM 笔记

文章目录 名词简写GPGGA GNGGA格式说明Linux PTY 虚拟串口对Linux GPGGA 模拟器 NTRIPNTRIP2.x vs NTRIP1.0NTRIP2.0 Server/Caster/Client 模拟器Base64Client不发GPGGA的通信过程Client只发一次GPGGAClient周期发GPGGA一个帐号两个应用不可用的演示 RTCMWireshark千寻NTRIP抓…