python socket請求與http端口掃描

socket4http() socket4http2() 模擬http請求
convert2crlf win-python3,將\n轉換成\r\n
connScan http連接掃描

b'HTTP' in connSkt.recv(20):

請求內容:抓取數據包

#coding:utf-8
from socket import *
from datetime import datetime
import sys
import re
import threading,queue
#str(sys._getframe().f_lineno)
#Add newline to string, cross-platform
#print(type(os.linesep))
#re.sub(b'\r\n', data)

def socket4http():
    #只有get請求會默認採取Connection: keep-alive
    url = '192.168.1.1'
    port = 80
    sock = socket(AF_INET, SOCK_STREAM)
    sock.connect((url, port))
    data = b''
    data += b'GET / HTTP/1.1\r\n'
    data += b'Host: 192.168.1.1\r\n'
    data += b'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0\r\n'
    data += b'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n'
    data += b'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\r\n'
    data += b'Accept-Encoding: gzip, deflate\r\n'
    data += b'Connection: close\r\n'
    data += b'Upgrade-Insecure-Requests: 1\r\n'
    data += b'Cache-Control: max-age=0\r\n\r\n'

    sock.send(data)
    response = b''
    temp = sock.recv(1024)
    while temp:
        temp = sock.recv(1024)
        response += temp
    print(b''+response)

def convert2crlf(data):
    p = re.compile(b'\n')
    return p.sub(b'\r\n', data)

def socket4http2():
    url = '192.168.1.1'
    port = 80
    sock = socket(AF_INET, SOCK_STREAM)
    sock.connect((url, port))

    data = b'''GET / HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

'''
    # p = re.compile(b'\n')
    # datas = p.sub(b'\r\n', data)
    datas = convert2crlf(data)
    print(datas)
    sock.send(datas)
    response = b''
    temp = sock.recv(1024)
    while temp:
        temp = sock.recv(1024)
        response += temp
    print(b'' + response)
    if b'htm' in response:
        print('success')

def connScan(tgHost, tgPort, timeout):
    try:
        t1 = datetime.now()

        connSkt = socket(AF_INET, SOCK_STREAM)
        connSkt.settimeout(timeout)
        ret = connSkt.connect_ex((tgHost, tgPort))
        #print(ret)
        #connSkt.send(b'a\r\n')
        #print(connSkt.recv(20))
        if ret == 0:
            connSkt.send(b'a\r\n')
            #print('.line:' + str(sys._getframe().f_lineno))
            print("[+]: port {} open".format(tgPort))
            if b'HTTP' in connSkt.recv(20):
                t2 = datetime.now()
                print('[+]: http open    cost: {}'.format(t2 - t1))
            else:
                print('[-]: http server not found')
        else:
            print('[-]: port {} closed'.format(tgPort))
        connSkt.close()
    except Exception as e:
        print('[-]: socket error ' + str(e))
        pass

def MultiHttpScan():
    pass

if __name__ == '__main__':
    tgHost = '192.168.1.1'
    tgPort = 80

    # tgHost = '39.156.69.79'
    # tgPort = 443

    timeout = 0.5
    connScan(tgHost, tgPort, timeout)
    #socket4http2()
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章