如何判断远端主机UDP端口是否开启
一、服务端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 (小心操作,清空了缓存就没了)
如何判断远端主机UDP端口是否开启相关推荐
- 如何判断目标主机是否在监听一个UDP端口(阿里云二面)
面试官:我问一个简单的问题,如何判断目标主机是否在监听一个UDP端口port? 我:给目标主机发送一个UDP报文(含目标port),如果收到回复,表示监听,否则表示没有监听. 面试官:有没有通用一点的 ...
- linux开启UDP端口
linux开启UDP端口 sudo ufw enablesudo ufw allow 11111/udpsudo ufw reload 开启UDP端口11111为例. 方法一 iptables -I ...
- udp端口不可达 icmp
1,报文格式 报文如下,10.30.13.1往10.30.16.10的80端口发送了一个UDP报文,80端口其实监听的是TCP. 服务器回复了一个类型为端口不可达的ICMP,ICMP数据部分就是请求U ...
- SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法
SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法 出处:http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy Li 作者 ...
- 测试tcp和udp端口连通性
测试tcp和udp端口连通性 测试tcp和udp端口连通性 tcp端口 命令 telnet udp端口 命令 nc nc命令用法 nc命令man帮助示例 nc默认tcp协议,使用udp要指定u 测试t ...
- UDP 端口扫描 - Nmap
0x00:简介 nmap 在二层做主机发现时使用的参数是 sn(ping 扫描,不做端口扫描).在三层做主机发现时也是使用的 sn 参数,这里二三层都用的 sn 参数,而具体使用的是二层协议 arp ...
- TCP/UDP端口连接测试
TCP/UDP端口连接测试 TCP端口连接测试 测试主机与目标端口的网络是否通畅 telnet ip port UDP端口连接测试 1.测试目标端口是否正常(前提是目标主机上启动了服务端口,且本机与服 ...
- android udp端口扫描,udp端口扫描-报告
<udp端口扫描-报告>由会员分享,可在线阅读,更多相关<udp端口扫描-报告(17页珍藏版)>请在人人文库网上搜索. 1.网络协议分析利用UDP进行主机端口扫描专 业: 班 ...
- linux查服务器端口是否开启,【服务器运维】linux如何查看端口是否开放?
在linux中我们可以通过在命令行中使用lsof命令.netstat命令来检查端口是否开放. 方法一:使用lsof命令 我们可以使用lsof命令来检查某一端口是否开放,基本语法如下: lsof -i: ...
最新文章
- 对数据库表中的某一字段去重分组排序
- 360金融沈赟:只有适配实践的技术才能实现价值掘金
- 5、catch中发生了未知异常,finally代码块如何应对?
- 乐山师范计算机科学与技术怎么样,乐山师范学院计算机科学与技术(本科)教育概况...
- spring源码分析之spring-core-io
- 上海oracle办公地址_筑梦之星上海共享办公基地为什么受到市场追捧?
- 程序员养生:熬夜指南
- Servelt中的ServletContext对象
- 第3篇:Flowable-IDM详述
- 《十四堂人生创意课》读书笔记,思维导图
- 2018 Multi-University Training Contest 3: G. Interstellar Travel(凸包)
- Logisim下载,安装与使用
- 斐讯路由器k3c虚拟服务器,斐讯K3C路由器32.1.26.175如何打开telnet升级到官改固件教程...
- matlab对xrd进行批量分峰,matlab画XRD数据图
- 电感 电容耦合的判断
- laydate使用官方使用方法
- java设计模式4,不要和陌生人说话
- centos7安装boost记录
- Win11怎么在右键菜单添加一键关机选项
- strapi v4,调用用户注册接口时出现“Email is already take“的解决方法
热门文章
- 985大学计算机考研难度排名2015,39所985院校考研难度排名,看看你是哪个档次?...
- 伪装目标检测(Camouflage Object Detection)部分经典论文汇总
- HDU 1864 最大报销额 dp
- 开发过程中的算法小技巧:
- qq游戏中的“中国象棋2017”闪退原因
- python爬虫实例—获取北邮教务GPA
- 基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)
- 文本文件编码与格式转换
- luogu P4117 [Ynoi2018] 五彩斑斓的世界
- 图像处理之卷积和积分运算