python_端口扫描小工具
端口扫描小工具
port_ip.py
#!usr/bin/env python 
#-*- coding:utf_8 -*-
import urllib
import socket
ip='192.168.16.136'
default_ports=[80,21,22,3389,1433]
def port_scan(ip,port):
    try:
        socket.setdefaulttimeout(3)
        s=socket.socket()
        s.connect((ip,port))
        print '[+] port:%d\t open'%port
        s.close()#关闭套接字
    except:
        pass
if __name__ == '__main__':
    for port in default_ports:
        port_scan(ip,port)
结果:
[+] port:80     open
port_ip_2.py
#!usr/bin/env python 
#-*- coding:utf_8 -*-
import urllib
import socket
ip='192.168.16.136'
default_ports=[80,21,22,3389,1433]
def port_scan(ip,port):
    try:
        socket.setdefaulttimeout(3)
        s=socket.socket()
        s.connect((ip,port))
        print '[+] port:%d\t open \t%s'%(port,socket.getservbyport(port))
        s.close()#关闭套接字
    except:
        pass
if __name__ == '__main__':
    for port in default_ports:
        port_scan(ip,port)
结果:
[+] port:80     open     http
####程序分析:
getservbyport(port)函数,获取对应端口所运行的的服务
map()函数的用法:
    map(f, iterable) 基本上等于:[f(x) for x in iterable]
map()函数案例
    >>> def add100(x):
    ...     return x + 100
    ... 
    >>> list1 = [11,22,33]
    >>> map(add100,list1)
    [101, 102, 103]
    >>> [add100(i) for i in list1]
    [101, 102, 103]
port_3.py
import urllib
import socket
ip='192.168.16.136'
default_ports=[80,21,22,3389,1433]
def port_scan(ip,port):
    try:
        socket.setdefaulttimeout(3)
        s=socket.socket()
        s.connect((ip,port))
        s.send('aaa\r\n')
        res=s.recv(40)
        print '[+] port:%d\t open \t%s'%(port,res)
        s.close()#关闭套接字
    except:
        pass
if __name__ == '__main__':
    map(port_scan,[ip]*len(default_ports),default_ports)
结果:
[+] port:80     open     <?xml version="1.0" encoding="iso-8859-1
发送数据,并且接收到一些数据,
port_4.py
#!usr/bin/env python 
#-*- coding:utf_8 -*-
import urllib
import socket,threading
ip='192.168.16.136'
default_ports=[21,22,80,1433,3306]
lock=threading.Semaphore(value=1)
def port_scan(ip,port):
    try:
        socket.setdefaulttimeout(3)
        s=socket.socket()
        s.connect((ip,port))
        s.send('dream9\r\n')
        res=s.recv(40)
        lock.acquire()
        print '[+] port:%d\topen\t%s' % (port,res)
        lock.release()
        s.close()
    except:
        pass
if __name__=='__main__':
    for port in default_ports:
        t=threading.Thread(target=port_scan,args=(ip,port))
        t.start()
####程序分析:
lock=threading.Semaphore(value=1)
信号机semaphore()每次有一个线程获取信号机,计数器为-1,如果为0,则其他线程就体制访问信号机,直到开始那个哪个线程释放信号机
lock.acquire(): 调用acquire()时-1
lock.release(): 释放Semaphore,将计数器+1
thread.exit()线程结束