我突然有一个用 Bash 来编写 TCP 端口扫描器的想法。Bash 支持可读写的特殊文件 /dev/tcp/host/port ,往这个文件写内容可以让 bash 打开一个 TCP 连接到 host:port ,如果写文件成功则表示此端口是打开的,否则说明该端口没有打开。
因此我们先简单的写一个测试脚本:
1 |
for port in {1..65535}; do
|
2 |
echo >/dev/tcp/google.com/$port &&
|
3 |
echo "port $port is open" ||
|
4 |
echo "port $port is closed"
|
该脚本将扫描 google.com 服务器端口,从 1 到 65535。当然,如果端口没打开的话是没法工作的,bash 花了 2 分钟时间意识到这点。
为了解决这个问题我们需要一些类似 alarm(2) 的方法来中断 bash,而 bash 没有内置的 alarm 函数,因此我们用 Perl 语言写了一个:
04 |
$SIG {ALRM} = sub { die };
|
这个 alarm 函数需要两个参数:alarm 调用的秒数和要执行的代码,如果执行的代码没有在指定的时间内执行完毕则该函数调用失败。
有了这个 alarm 函数,我们就可以修改上面的代码如下:
1 |
for port in {1..65535}; do
|
2 |
alarm 1 " echo >/dev/tcp/google.com/$port &&
|
3 |
echo \ "port $port is open\"" ||
|
4 |
echo "port $port is closed"
|
这个终于可以运行了,当扫描到某个端口是关闭的, bash 将在 1 秒后执行下一个端口的扫描。
然后我们将这些代码封装到一个 scan 函数中:
02 |
if [[ -z $1 || -z $2 ]]; then
|
03 |
echo "Usage: $0 <host> <port, ports, or port-range>"
|
11 |
IFS=- read start end <<< "$2"
|
12 |
for ((port=start; port <= end; port++)); do
|
17 |
IFS=, read -ra ports <<< "$2"
|
25 |
for port in "${ports[@]}" ; do
|
26 |
alarm 1 " echo >/dev/tcp/$host/$port &&
|
27 |
echo \ "port $port is open\"" ||
|
28 |
echo "port $port is closed"
|
这样就可以在 shell 中使用 scan 函数,需要的参数包括要扫描的主机地址、端口列表(可以时端口组合和端口范围,或者是某个特定端口)
下面是扫描 google.com 服务器的 78 - 82 端口:
1 |
$ scan google.com 78-82 |
如果你想测试 UDP 端口,只需要将前面提及的 /dev/tcp 改为 /dev/udp/
原文:http://www.oschina.net/question/12_67215
分享到:
相关推荐
`naabu` 是一款用 Go 语言编写的高效端口扫描器,其设计目的是快速、准确地识别目标主机的开放端口。 **二、Go语言的优势** Go 语言(又称 Golang)是 Google 推出的一种静态类型、编译型、并发型且具有垃圾回收...
Nmap不仅仅是一个端口扫描器,还具有网络发现、操作系统检测、服务版本识别等多种功能。 ### 一、Nmap的基本概念 1. **网络发现(Host Discovery)**:Nmap通过发送不同类型的ICMP、TCP或UDP数据包来检测网络上...
**nmap 扫描器 for Linux** nmap(Network Mapper)是一款广泛使用的开源网络扫描工具,主要用于探测网络主机的状态、开放的端口以及服务识别。它由 Gordon Lyon 创建,自1997年以来,一直是安全专业人员、系统管理...
1. **端口扫描**:可以扫描指定IP地址或IP范围内的开放端口,帮助你找出服务器上的活动服务。 2. **TCP连接测试**:你可以发起TCP连接请求,模拟客户端与服务器的交互,查看连接是否成功,以及响应时间。 3. **UDP...
2. **端口扫描**:确定目标主机开放了哪些端口及运行的服务。 3. **操作系统检测**:识别目标主机的操作系统类型。 4. **服务版本探测**:了解目标主机上运行服务的具体版本信息。 5. **安全漏洞扫描**:配合插件...
对于SSH(Secure Shell)服务,由于其默认的22端口是攻击者常常瞄准的目标,因此,将其更改为非标准端口可以降低被恶意扫描和攻击的风险。本文将详细介绍如何在CentOS系统中调整SSH的默认端口,并探讨相关安全注意...
介绍如何使用Python编写一个简单的端口扫描器,包括基本的TCP/UDP端口扫描功能,并探讨如何优化扫描速度以避免被目标系统的防火墙拦截。 - **案例2:利用Perl进行SQL注入攻击**。通过编写Perl脚本实现对Web应用的...
`--reason`显示扫描失败的原因,`-p-`扫描所有65535个TCP端口,`-n`禁用DNS解析,`-Pn`假设所有主机都在线,`-oX`指定输出格式为XML。例如: ```bash Nmap –sS –v --reason –p- –n –Pn –oX tcp4_lan_...
5. **错误处理**:好的端口扫描器会处理各种异常情况,如无效的IP地址、无法解析的主机名、无权限或资源限制等,并提供有用的错误信息。 6. **性能优化**:`bash-portscanner` 可能包含了一些优化措施,比如限制...
二、端口扫描和漏洞探测 * 使用扫描结果,探测到 21、22、3389 和数据库的端口,然后加载字典爆破 * 使用 Struts2 框架和 Struts2poc 扫描漏洞 三、Web 测试 * 使用 Fofa 浏览器插件探测旁站资产 * 测试 web 应用...
此命令中 `-v` 表示详细输出,`-w 2` 表示超时时间为 2 秒,`-z` 表示进行端口扫描模式。 ##### 2. 文件传输 `nc` 还可以用来传输文件,比如将 `test.txt` 从 192.168.2.33 传输到 192.168.2.34: - **接收方**...
使用Netcat可以连接到目标系统上的TCP/UDP端口,或者在指定端口上监听传入的连接,这对于测试网络服务的连通性、进行端口扫描和数据传输等都是极其有用的。 除了Netcat之外,Kali Linux还集成有许多其他的渗透测试...
本文将详细介绍一个基于JavaScript编写的网络扫描仪——networkscan-javascript,带你了解其原理、使用方法以及潜在的应用场景。 网络扫描仪,简而言之,是通过发送不同类型的网络请求来探测网络状态和目标系统信息...
在Linux上,可以使用`nc`命令进行端口扫描。命令格式为`nc -zv IP地址 端口号`,`-z`表示扫描模式,`-v`表示详细输出。例如: ```bash nc -zv localhost 8080 ``` 如果端口开放,将显示“Connection succeeded...
对于SSH(Secure Shell)服务来说,其默认监听的端口是22,由于这个端口是众所周知的,因此成为了恶意攻击者扫描和尝试破解的目标。为了降低被攻击的风险,我们可以将sshd(SSH守护进程)的端口改为一个非标准的、不...
`nmap`则是一个功能强大的网络扫描工具,不仅可以检查端口开放情况,还能探测操作系统、服务版本等更多信息。 总结,`telnet`在Linux环境中主要用来进行简单的网络连接测试,但应谨慎使用,特别是在涉及数据隐私和...
总结来说,“BroScience”靶场机器展示了多种常见的安全漏洞和攻击手段,包括但不限于信息收集、端口扫描、文件包含漏洞利用、反序列化攻击、数据库渗透、密码破解、权限提升等。这些技巧对于提升网络安全意识和防御...
例如,可以使用Scapy执行简单的端口扫描: ```python results = sr(IP(dst="target_ip")/TCP(dport=[80, 443], flags="S"), timeout=2, verbose=0) for sent, received in results: if received.haslayer(TCP) ...
例如,更改默认的SSH端口22可以降低被自动化扫描攻击的风险: ```vi Port 2222 ``` 记得重启sshd服务使配置生效: ```bash sudo systemctl restart sshd ``` **密钥对生成** OpenSSH支持公钥认证,这是一种比传统...
接着安装防病毒扫描器ClamAV: ```bash yum install -y clamav clamav-update freshclam ``` ### 五、安装SpamAssassin SpamAssassin是用于识别垃圾邮件的工具: ```bash yum install -y spamassassin sa-...