`
cloudmail
  • 浏览: 272167 次
  • 来自: 广州
社区版块
存档分类
最新评论

【转】 使用 Bash 编写的 TCP 端口扫描器

 
阅读更多

 

我突然有一个用 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"
5 done

该脚本将扫描 google.com 服务器端口,从 1 到 65535。当然,如果端口没打开的话是没法工作的,bash 花了 2 分钟时间意识到这点。

为了解决这个问题我们需要一些类似 alarm(2) 的方法来中断 bash,而 bash 没有内置的 alarm 函数,因此我们用 Perl 语言写了一个:

01 alarm() {
02   perl -e '
03     eval {
04       $SIG{ALRM} = sub die };
05       alarm shift;
06       system(@ARGV);
07     };
08     if ($@) { exit 1 }
09   "$@";
10 }

这个 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"
5 done

这个终于可以运行了,当扫描到某个端口是关闭的, bash 将在 1 秒后执行下一个端口的扫描。

然后我们将这些代码封装到一个 scan 函数中:

01 scan() {
02   if [[ -z $1 || -z $2 ]]; then
03     echo "Usage: $0 <host> <port, ports, or port-range>"
04     return
05   fi
06
07   local host=$1
08   local ports=()
09   case $2 in
10     *-*)
11       IFS=- read start end <<< "$2"
12       for ((port=start; port <= end; port++)); do
13         ports+=($port)
14       done
15       ;;
16     *,*)
17       IFS=, read -ra ports <<< "$2"
18       ;;
19     *)
20       ports+=($2)
21       ;;
22   esac
23
24
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"
29   done
30 }

这样就可以在 shell 中使用 scan 函数,需要的参数包括要扫描的主机地址、端口列表(可以时端口组合和端口范围,或者是某个特定端口)

下面是扫描 google.com 服务器的 78 - 82 端口:


1 $ scan google.com 78-82
2 port 78 is closed
3 port 79 is closed
4 port 80 is open
5 port 81 is closed
6 port 82 is closed

如果你想测试 UDP 端口,只需要将前面提及的 /dev/tcp 改为 /dev/udp/

 

原文:http://www.oschina.net/question/12_67215

分享到:
评论

相关推荐

    naabu - Go编写的端口扫描工具.zip

    `naabu` 是一款用 Go 语言编写的高效端口扫描器,其设计目的是快速、准确地识别目标主机的开放端口。 **二、Go语言的优势** Go 语言(又称 Golang)是 Google 推出的一种静态类型、编译型、并发型且具有垃圾回收...

    Nmap端口扫描.rar

    Nmap不仅仅是一个端口扫描器,还具有网络发现、操作系统检测、服务版本识别等多种功能。 ### 一、Nmap的基本概念 1. **网络发现(Host Discovery)**:Nmap通过发送不同类型的ICMP、TCP或UDP数据包来检测网络上...

    nmap 扫描器 for linux

    **nmap 扫描器 for Linux** nmap(Network Mapper)是一款广泛使用的开源网络扫描工具,主要用于探测网络主机的状态、开放的端口以及服务识别。它由 Gordon Lyon 创建,自1997年以来,一直是安全专业人员、系统管理...

    ubuntu下好用的TCP/UDP调试工具

    1. **端口扫描**:可以扫描指定IP地址或IP范围内的开放端口,帮助你找出服务器上的活动服务。 2. **TCP连接测试**:你可以发起TCP连接请求,模拟客户端与服务器的交互,查看连接是否成功,以及响应时间。 3. **UDP...

    nmap扫描服务器端口(远程桌面端口)

    2. **端口扫描**:确定目标主机开放了哪些端口及运行的服务。 3. **操作系统检测**:识别目标主机的操作系统类型。 4. **服务版本探测**:了解目标主机上运行服务的具体版本信息。 5. **安全漏洞扫描**:配合插件...

    CentOS调整SSH默认端口

    对于SSH(Secure Shell)服务,由于其默认的22端口是攻击者常常瞄准的目标,因此,将其更改为非标准端口可以降低被恶意扫描和攻击的风险。本文将详细介绍如何在CentOS系统中调整SSH的默认端口,并探讨相关安全注意...

    脚本渗透系列教程

    介绍如何使用Python编写一个简单的端口扫描器,包括基本的TCP/UDP端口扫描功能,并探讨如何优化扫描速度以避免被目标系统的防火墙拦截。 - **案例2:利用Perl进行SQL注入攻击**。通过编写Perl脚本实现对Web应用的...

    安全扫描步骤.docx

    `--reason`显示扫描失败的原因,`-p-`扫描所有65535个TCP端口,`-n`禁用DNS解析,`-Pn`假设所有主机都在线,`-oX`指定输出格式为XML。例如: ```bash Nmap –sS –v --reason –p- –n –Pn –oX tcp4_lan_...

    bash-portscanner

    5. **错误处理**:好的端口扫描器会处理各种异常情况,如无效的IP地址、无法解析的主机名、无权限或资源限制等,并提供有用的错误信息。 6. **性能优化**:`bash-portscanner` 可能包含了一些优化措施,比如限制...

    096-红队实战攻击之随缘测站(上).pdf

    二、端口扫描和漏洞探测 * 使用扫描结果,探测到 21、22、3389 和数据库的端口,然后加载字典爆破 * 使用 Struts2 框架和 Struts2poc 扫描漏洞 三、Web 测试 * 使用 Fofa 浏览器插件探测旁站资产 * 测试 web 应用...

    linuxnc操作

    此命令中 `-v` 表示详细输出,`-w 2` 表示超时时间为 2 秒,`-z` 表示进行端口扫描模式。 ##### 2. 文件传输 `nc` 还可以用来传输文件,比如将 `test.txt` 从 192.168.2.33 传输到 192.168.2.34: - **接收方**...

    penetration-testing-with-kali

    使用Netcat可以连接到目标系统上的TCP/UDP端口,或者在指定端口上监听传入的连接,这对于测试网络服务的连通性、进行端口扫描和数据传输等都是极其有用的。 除了Netcat之外,Kali Linux还集成有许多其他的渗透测试...

    networkscan-[removed]一个简单JavaScript网络扫描仪

    本文将详细介绍一个基于JavaScript编写的网络扫描仪——networkscan-javascript,带你了解其原理、使用方法以及潜在的应用场景。 网络扫描仪,简而言之,是通过发送不同类型的网络请求来探测网络状态和目标系统信息...

    如何测试端口通不通(四种方法)

    在Linux上,可以使用`nc`命令进行端口扫描。命令格式为`nc -zv IP地址 端口号`,`-z`表示扫描模式,`-v`表示详细输出。例如: ```bash nc -zv localhost 8080 ``` 如果端口开放,将显示“Connection succeeded...

    修改sshd默认端口的步骤

    对于SSH(Secure Shell)服务来说,其默认监听的端口是22,由于这个端口是众所周知的,因此成为了恶意攻击者扫描和尝试破解的目标。为了降低被攻击的风险,我们可以将sshd(SSH守护进程)的端口改为一个非标准的、不...

    Linux telnet 工具安装包

    `nmap`则是一个功能强大的网络扫描工具,不仅可以检查端口开放情况,还能探测操作系统、服务版本等更多信息。 总结,`telnet`在Linux环境中主要用来进行简单的网络连接测试,但应谨慎使用,特别是在涉及数据隐私和...

    HTB打靶日记:BroScience

    总结来说,“BroScience”靶场机器展示了多种常见的安全漏洞和攻击手段,包括但不限于信息收集、端口扫描、文件包含漏洞利用、反序列化攻击、数据库渗透、密码破解、权限提升等。这些技巧对于提升网络安全意识和防御...

    scapy使用说明

    例如,可以使用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) ...

    Linux系统中OpenSSH的安装配置.rar_linux 配置_openssh_ssh

    例如,更改默认的SSH端口22可以降低被自动化扫描攻击的风险: ```vi Port 2222 ``` 记得重启sshd服务使配置生效: ```bash sudo systemctl restart sshd ``` **密钥对生成** OpenSSH支持公钥认证,这是一种比传统...

    iredmail安装Centos6.0下安装说明(第二部分)

    接着安装防病毒扫描器ClamAV: ```bash yum install -y clamav clamav-update freshclam ``` ### 五、安装SpamAssassin SpamAssassin是用于识别垃圾邮件的工具: ```bash yum install -y spamassassin sa-...

Global site tag (gtag.js) - Google Analytics