欢迎光临!
若无相欠,怎会相见

Python学习之端口扫描器(1)

终于接触到关于黑客方面的工具编写,还是看的《python绝技:运用python成为顶级黑客》这本书。曾经,黑客曾是我的追求我的梦想,可是。。。

socket

在编写端口扫描器之前,需要了解socket网络编程,虽然书中代码都给你了,但是,还是需要自己去理解。下面是一些socket模块提供的一些方法。

  1. socket.gethostbyname( hostname ) :这个函数将主机名(如域名)换换为 IP 地址,如
    www.baidu.com 将会返回 IPv4 的地址为 115.239.211.112
  2. socket.gethostbyaddr( ip_address ) :这个函数传入一个 IP 地址将返回一个元组,
    其中包含主机名,别名列表和同一接口的 IP 地址列表。
  3. socket.socket([family[, type[, proto]]]) :这个函数将产生一个新的 socket,通过给定的socket 地址簇和 socket 类型,地址簇的可以是 AF_INET(默认),AF_INET6 或者是 AF_UNIX,另外,socket 类型可以为一个 TCP 套接字即 SOCK_STREAM(默认),或者是UDP套接字即SOCK_DGRAM,或者其他的套接字类型。最后协议号通常为零,在大多数情况下省略不写。
  4. socket.create_connection(address[, timeout[, source_address]] :这个函数传入一个包含 IP 地 址和端口号的二元元组返回一个 socket 对象,此外还可以选择超时重连。(注:这个函数比 socket.connect()更加高级可以兼容 IPv4 和 IPv6)。

扫描器源代码

# -*- coding: utf-8 -*-
# @Time    : 2017/11/16 15:20
# @Author  : Darker
# @Site    : www.liangz.org
# @File    : scanhost.py
# @Software: PyCharm

import socket


def connScan(targetHost, targetPort):
    try:
        connSkt = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        connSkt.connect((targetHost,targetPort))
        print(u'[+]%d/tcp 开启' % targetPort)
        connSkt.close()
    except:
        print(u'[-]%d/tcp 关闭' % targetPort)


def portScan(targetHost, targetPorts):
    try:
        targetIP = socket.gethostbyname(targetHost)
    except:
        print(u"[-] 不能识别 '%s' : 未知主机" % targetHost)
        return
    try:
        targetName = socket.gethostbyaddr(targetIP)
        print(u'\n[+]扫描:' + targetName[0])
    except:
        print(u'\n[+]扫描:' + targetIP)
    socket.setdefaulttimeout(1)
    for targetPort in targetPorts:
        print(u'扫描端口: ' + str(targetPort))
        connScan(targetHost,int(targetPort))
portScan('256.168.1.1', [80,443,3389,1433,23,445,9090])
portScan('192.168.1.1', [80,443,3389,1433,23,445,9090])
portScan('127.0.0.1', [80,443,3389,1433,23,445,9090])
portScan('www.hfut.edu.cn', [80,443,3389,1433,23,445,9090])

这个扫描器比较低端,不过,这毕竟是第一次编写,后面会慢慢添加,丰满它的功能。输出结果:

D:\Python27\python.exe E:/Projects/Python/20171114/scanhost.py
[-] 不能识别 '256.168.1.1' : 未知主机

[+]扫描:192.168.1.1
扫描端口: 80
[+]80/tcp 开启
扫描端口: 443
[-]443/tcp 关闭
扫描端口: 3389
[-]3389/tcp 关闭
扫描端口: 1433
[-]1433/tcp 关闭
扫描端口: 23
[-]23/tcp 关闭
扫描端口: 445
[-]445/tcp 关闭
扫描端口: 9090
[-]9090/tcp 关闭

[+]扫描:DESKTOP-OL475DR
扫描端口: 80
[-]80/tcp 关闭
扫描端口: 443
[-]443/tcp 关闭
扫描端口: 3389
[-]3389/tcp 关闭
扫描端口: 1433
[-]1433/tcp 关闭
扫描端口: 23
[-]23/tcp 关闭
扫描端口: 445
[+]445/tcp 开启
扫描端口: 9090
[-]9090/tcp 关闭

[+]扫描:tv.hfut.edu.cn
扫描端口: 80
[+]80/tcp 开启
扫描端口: 443
[+]443/tcp 开启
扫描端口: 3389
[-]3389/tcp 关闭
扫描端口: 1433
[-]1433/tcp 关闭
扫描端口: 23
[-]23/tcp 关闭
扫描端口: 445
[-]445/tcp 关闭
扫描端口: 9090
[-]9090/tcp 关闭

通过扫描,我竟然发现我的电脑445端口开着,这可把我吓了一跳,上网查查,445端口信息。

445端口是一个毁誉参半的端口,有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,他们能通过该端口偷偷共享你的硬盘,甚至会在悄无声息中将你的硬盘格式化掉!

吓得我赶紧关了,别到时候中个勒索病毒。

如有错误,敬请指出!谢谢

赞(0) 打赏
转载请注明:飘零博客 » Python学习之端口扫描器(1)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临