<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          20 行代碼編寫(xiě)一個(gè)簡(jiǎn)單的端口掃描器

          共 1696字,需瀏覽 4分鐘

           ·

          2022-04-14 05:21

          端口掃描是非常實(shí)用的,不止用在信息安全方面,日常的運(yùn)維也用得到。這方面的工具也不要太多,搞過(guò) CTF 的朋友會(huì)告訴你有多少端口掃描工具,那為什么還要用 Python 再自己實(shí)現(xiàn)一遍?這個(gè)問(wèn)題就像飯店里的菜已經(jīng)很好吃了,為什么還要自己燒菜一樣,主要還是為了適合自己的口味,添加自己需要的個(gè)性功能。

          今天我們將用 20 行代碼編寫(xiě)一個(gè)簡(jiǎn)單的端口掃描器。讓我們開(kāi)始吧!

          1、需要的庫(kù)

          都是標(biāo)準(zhǔn)庫(kù),因此內(nèi)網(wǎng)環(huán)境也不影響:

          import?socket
          import?argparse
          import?sys
          import?time

          套接字庫(kù)是一個(gè)低級(jí)網(wǎng)絡(luò)接口庫(kù),它允許我們?cè)谀_本中創(chuàng)建網(wǎng)絡(luò)連接。argparse 庫(kù)用于解釋傳遞給我們腳本的參數(shù)。sys 庫(kù)允許我們與系統(tǒng)交互。最后,time 庫(kù)用來(lái)統(tǒng)計(jì)耗時(shí)。

          2、獲取一個(gè) host 地址

          parser?=?argparse.ArgumentParser()
          parser.add_argument('host')
          args?=?parser.parse_args()

          這樣腳本在運(yùn)行的時(shí)候,第一個(gè)參數(shù)就可以傳入一個(gè)主機(jī)名或 ip 地址,下文就可以通過(guò) args.host 來(lái)使用。

          3、循環(huán)所有的端口

          端口占用 2 個(gè)字節(jié),因此其范圍是 1-65535

          start?=?time.time()
          try:
          ????for?port?in?range(1,?65536):
          ????????sock?=?socket.socket(socket.AF_INET,?socket.SOCK_STREAM)
          ????????sock.settimeout(1)
          ????????result?=?sock.connect_ex((args.host,?port))
          ????????if?result?==?0:
          ????????????print("Port:?{}?Open".format(port))
          ????????sock.close()
          except?KeyboardInterrupt:
          ????sys.exit()
          end?=?time.time()

          如果 sock.connect_ex 返回了 0 說(shuō)明端口開(kāi)放,為了讓程序正常退出,我們加上 try except 來(lái)捕獲鍵盤(pán)發(fā)起的中斷。

          4、完整腳本

          一旦 for 循環(huán)完成并掃描了所有端口,我們將獲取時(shí)間并打印出腳本運(yùn)行的時(shí)間:

          import?socket
          import?argparse
          import?sys
          import?time

          parser?=?argparse.ArgumentParser()
          parser.add_argument('host')
          args?=?parser.parse_args()
          start?=?time.time()

          try:
          ????for?port?in?range(1,?65536):
          ????????sock?=?socket.socket(socket.AF_INET,?socket.SOCK_STREAM)
          ????????sock.settimeout(1)
          ????????result?=?sock.connect_ex((args.host,?port))
          ????????if?result?==?0:
          ????????????print("Port:?{}?Open".format(port))
          ????????sock.close()
          except?KeyboardInterrupt:
          ????sys.exit()

          end?=?time.time()
          print(f"Scanning?completed?in:?{end-start:.3f}s")

          除去空行,代碼一共 20 行,運(yùn)行效果如下:

          往期推薦

          1、Python 批量加水印只需一行命令!
          2、Python中關(guān)于進(jìn)度條的6個(gè)實(shí)用技巧
          3、這5種炫酷的動(dòng)態(tài)圖,都是用Python實(shí)現(xiàn)的!
          4、用 Python 刪除文件中的亂碼
          5、Python 超強(qiáng)大的PDF表格提取器 — Camelot

          點(diǎn)擊關(guān)注公眾號(hào),閱讀更多精彩內(nèi)容
          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九一无码 | 日韩在线观看中文字幕 | 动漫操逼网站 | 欧美性xxxxx | 无码人妻精品一区二区三区99仓 |