Python ファイル I/O_file_例外_モジュール_サードパーティ パッケージ_カラー コンポーネント_ブラスティング シークレット_ピング ホスト生存 (03)

Python ファイル I/O_file_例外_モジュール_サードパーティ パッケージ_カラー コンポーネント_ブラスティング シークレット_ピング ホスト生存 (03)

記事ディレクトリ

1ファイル読み込み

参考動画:ダークホースのナニーレベル動画

1.1 read() メソッド:
文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
1.2 readlines() メソッド:

eadlines は、ファイル全体の内容を 1 行ずつ一度に読み取り、各行のデータを要素としたリストを返します。

f=open('python.txt')
content=f.readlines()
print(content) # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']

#关闭文件
f.close()
1.3 read() の使用例:
1.3.1 text.txt ファイルの内容は次のとおりです。
在岁月的轮回里,
藏着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.3.2 py実行可能ファイル
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))

print(f"读取10个字节:{f.read(10)}")
print(f"read方法读取全部内容的结果:{f.read()}")
1.3.3 結果の出力: 注: read() メソッドを 2 回実行します。2 回目は、read 後の添え字の読み取りを続けます。
<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,
藏
read方法读取全部内容的结果:着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.4 for ループはファイル行を読み取ります
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))
for line in f:
    print(f"读取10个字节:{line}")
f.close()

結果を出力します。

<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,

读取10个字节:藏着世间的种种美,

读取10个字节:高山巍峨耸入云霄,

读取10个字节:江河奔腾破浩渺。
1.5 特定の文字を読んで、出現する回数を数える練習をする
=====test.txt内容========
itheima itcast python
itheima python itcast
beijing shanghai itheima
=======思路======= 
第一种. read() , count("itheima")
第二种.一行行的读取文件 按照空格切分,统计itheima的次数
===============
方式一:
f = open("D:/test.txt","r", encoding="UTF-8")
content = f.read()  # 读取全部内容
count = content.count("itheima")
print(f"的在文件中出现了:{count}次")
f.close()

打印结果: 3次

方式二:
f = open("D:/test.txt","r", encoding="UTF-8")
count = 0
for line in f:
	line = line.strip()
	words = line.split(" ") # 以空格分隔
	print(words)  # 打印每一行有个换行符 ['itheima', 'itcast', 'python\n']...,使用strip()
	for word in words:
		if word == "itheima":
			count += 1
print(count)
f.close()

打印结果出现:3次
1.4 読み取り読み取り方法の概要
操作する 関数
ファイル オブジェクト = open(ファイル、モード、エンコーディング) ファイルを開いてファイルオブジェクトを取得します
ファイル object.read(num) num を指定せずに、指定したバイト長を読み取り
、ファイル全体を読み取ります。
ファイル object.readline() 一行読む
ファイル object.readlines() すべての行を読んでリストを取得する
ファイルオブジェクトの行の場合 ファイル オブジェクトの for 行 for ループ ファイル行、一度に 1 行のデータを取得します
ファイル object.close() ファイルオブジェクトを閉じる
open() を f として使用 open 構文でファイルを開き、自動的に閉じることができます

2. ファイルの書き込み

知らせ:

write が直接

flash が呼び出されるとき

#1.打开文件
f=open('python.txt','w')

#2.文件写入
f write(hello world)

#3.内容刷新
f.flush()
2.1 write() ファイルの書き込み:

1. オープン関数モードを使用してファイルを書き込みます。

2. 書き込みメソッドは次のとおりです:
wirte()、コンテンツの書き込み
フラッシュ()、ハードディスクへのコンテンツのリフレッシュ

注:
w モードでは、ファイルが存在しない場合、新しいファイルが作成されます。w
モードでは、ファイルが存在する場合、元の内容はクリアされます
。close() メソッドには、flush() メソッドの機能があります。

2.1.1 bill.txtの内容
周轮,2022-01-01,100000,消费,正式
周轮,2022-01-02,300000,收入,正式
周轮,2022-01-03,100000,消费,测试
2.1.2 py実行ファイル、バックアップファイルの書き込み
fr =open("D:/test.txt", "r", encoding="UTF-8")  # 打开文件得到文件对象,准备读取
fw =open("D:/bill.txt.bak", "w", encoding="UTF-8")  #打开文件得到文件对象,准备写入

# for 循环读取文件
for line in fr:
	line = line.strip()
	if line.split(",")[4] == "测试": # 判断内容,将满足的内容写出
		continue
	fw.write(line)  # 将内容写出去
	fw.write("\n")  #由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fr.close()
fw.close()   # close内置flush()功能,flush將内存的文件写入磁盘

3. ファイル添付コンテンツ

コンテンツを追加するモード

#1.打开文件,通过a模式打开即可
f=open('python.txt', 'a')

#2.文件写入
f.write('hello world')

#3.内容刷新
f.flush()

注:
a モードではファイルが存在しない場合はファイルが作成され、
a モードではファイルが存在する場合はファイルが末尾に追加されます。

3.1 ファイルがない場合、コンテンツを追加するファイルが自動的に作成されます。例:
#打开文,不存在文件
f = open("D:/test1.txt","a",encoding="UTF-8")  #write写入
f.write("heima程序员")
f.flush()  #flush新
f.close()  #close关闭

# 打开路径,自动test1.txt文件及追加了内容
3.2 続けて追加コンテンツを書き込みます。
f = open("D:/test1.txt", "a", encoding="UTF-8")  #打开一个存在的文件

f.write("\npython最佳保姆式") # write写入 \n换行

f.close()  #close关闭
3.3 概要
1追加写入文件使用open函数的”a”模式进行写入

2.追加写入的方法有(和w模式一致):
	wirte(),写入内容
	flush(),刷新内容到硬盘中
	
3.注意事项:
	a模式,文件不存在,会创建新文件
	a模式,文件存在,会在原有内容后面继续写入
	可以使用”\n”来写出换行符

4 例外処理

参考動画:ダークホースのナニーレベル動画

珍しい特徴

例外は推移的です

関数 func01 で例外が発生し、その例外がキャッチされて処理されなかった場合、

例外は関数 func02 に渡されます。func02 が例外をキャッチして処理しない場合、

main 関数はこの例外をキャッチします。これは例外の推移性です。

注:
すべての関数が例外をキャッチしない場合、プログラムはエラーを報告します。

ここに画像の説明を挿入します

def func1():
    print("func1 开始执行")
    num=1/0
    #肯定有异常,除以0的异常
    print("func1 结束执行")

# 定义一个无异常的方法,调用上面的方法
def func2():
    print("func2 开始执行")
    func1()
    print("func2 结束执行")

#定义一个方法,调用上面的方法
def main():
    try:
        func2()
    except Exception as e:
        print(f"出现异常了,异常的信息是:{
      
      e}")

main()

印刷結果

func2 开始执行
func1 开始执行
出现异常了,异常的信息是:division by zero

5 モジュールのインポートとエクスポート

参考動画:Dark Horse高画質ナニーレベル動画

モジュールは使用前にインポートする必要があります。インポートの構文は次のとおりです。

[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]   # from是针对模块中某个方法去使用

モジュールをインポートする方法:

常用的组合形式如:
    import 模块名
    from   模块名  import  类、变量、方法等
    from   模块名  import  *
    import 模块名  as  别名
    from   模块名  import  功能名  as  别名
5.1 インポートの基本構文:
import 模块名
import 模块名1,模块名2

模块名.功能名()
5.2 インポートの場合: 時間モジュールをインポートするには time.sleep() を呼び出す必要があります
#导入时间模块
import time

print("开始")
#让程序睡眠1秒(阻塞)
time.sleep(1)
print("结束")
5.3 基本構文から:

モジュール内のメソッドに使用

from 模块名 import 功能名
功能名()

注意:
from time import *  # 是将某块中所有方法都导入
5.4 ケースから: time モジュールに sleep メソッドをインポートし、sleep 呼び出しを直接書くことができます
#导入time时间模块中的sleep方法
from time import sleep

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")
5.5 ケースから: time モジュールの import *

ケース: time モジュール内のすべてのメソッドをインポートすると、スリープ コールを直接記述できます。

#导入时间模块中所有的方法
from time import *

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

6 カスタムモジュール

参考動画:Dark Horse ナニーレベルの高画質動画

ここに画像の説明を挿入します

6.1 外部インポートでは関数を単独で実行することはできません
my_modulel.py ファイル
def test(a, b):
	print(a + b)

if __name__ == '__main__': # 加入这个函数,也可以单独测试运行定义的函数
	test(1,2)
6.2 [__all__]変数

全て書かなくても__all__使用可能 全て書いてもリスト内の機能のみ使用可能 全ては*のみに限定

ここに画像の説明を挿入します

6.3 概要
 1.如何自定义模块并导入?
    在Python代码文件中正常写代码即可,通过import、from关键字和导
    入Python内置模块一样导入即可使用。

2._main_变量的功能是?
    if __main__==“_main_”表示,只有当程序是直接执行的才会进入
    if内部,如果是被导入的,则if无法进入
    
3.注意事项
	不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

7 カスタム Python パッケージ

参考ビデオ:ダークホースのナニーレベルのビデオ

基于Python模块,我们可以在编写代码的时候,导入许
多外部代码来丰富功能。
但是,如果Python的模块太多了,就可能造成一定的混
乱,那么如何管理呢?
通过Python包的功能来管理。
7.1 手順は次のとおりです

ここに画像の説明を挿入します

7.2 pycharmの基本手順(パッケージの作成)

プロジェクトのルートディレクトリを選択 -> [新規]を右クリック -> [Pythonパッケージ] -> パッケージ名(my_packageなど)を入力 -> OK -> 新しい関数モジュールを作成

注: (my_package) などの新しいパッケージを作成した後、パッケージ内にファイルが自動的に作成されます__init__.py。このファイルは、次のようなパッケージのインポート動作を制御します。 [__all__ =['my_module1']]

パッケージ内に新しいファイル *.py を作成できます --> それぞれの機能 *.py ファイル

7.3 カスタムパッケージのインポート
import my_package.my_modulel
import my_package.my_module2

my_package.my_modulel.info_print1()   #使用包里面函数


或者优化导入:
import my_package.my_module2 import info_print1

info_print1()   #使用包里面函数
7.4 概要
1.什么是Python的包?
  包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通
  过包,在逻辑上将一批模块归为一类,方便使用。
    
2._init_.py文件的作用?
  创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是
  Python的包,而非普通的文件夹。
	
3.all变量的作用?
	同模块中学习到的是一个作用,控制import*能够导入的内容

8 つのサードパーティ パッケージ

参考ビデオ:ダークホースのナニーレベルのビデオ

8.1 サードパーティパッケージとは何ですか?

パッケージには多数の Python モジュールを含めることができ、各モジュールには多くの関数が含まれることがわかっています。
したがって、パッケージは同じ種類の関数の集合であると考えることができます。

Python プログラムのエコシステムには、開発効率の向上に大きく役立つサードパーティ パッケージ (非公式 Python) が多数あります。たとえば、科学技術計算でよく使用される numpy パッケージ データ分析でよく使用さ
れる
pandas
パッケージデータ計算で使用される: pyspark、apache-flink パッケージ
グラフィック視覚化で一般的に使用される: matplotlib、pyecharts
人工知能で一般的に使用される: tensorflow

8.2 サードパーティパッケージのインストール

サードパーティのパッケージをインストールする-pip

サードパーティ パッケージのインストールは非常に簡単で、Python の組み込み pip プログラムを使用するだけです。

久しぶりにコマンド プロンプト プログラムを開き、「
pipinstall パッケージ名」と入力して
、ネットワーク経由でサードパーティ パッケージをすばやくインストールします。

命令提示符cmd进行安装:

C:\Users\javac>pip install numpy
8.3 pip のネットワーク最適化

pip はパッケージをダウンロードするために海外の Web サイトに接続するため、速度が非常に遅くなる場合があります。
次のコマンドを使用して国内 Web サイトに接続し、パッケージをインストールできます:
pip install -i https://pyp.ituna.tsinghua.edu.cn/simple package name

命令提示符cmd
C:\Users\javac> pip install	 -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

https://pypi.tuna.tsinghua.edu.cn/simple は清華大学が提供する Web サイトで、pip プログラムがサードパーティのパッケージをダウンロードできるようにします。

インストールが成功したことを確認するテスト

ここに画像の説明を挿入します

8.4 pycharm はサードパーティのパッケージをインストールします
8.4.1 右下隅の Python をクリック --> インター設定を選択します

ここに画像の説明を挿入します

8.4.2 「+」をクリックします。

ここに画像の説明を挿入します

8.4.3 選択後、インストールを選択→ウィンドウを閉じる→バックグラウンドでダウンロードを確認します。

ここに画像の説明を挿入します

8.4.4 バックグラウンドでのダウンロードステータス

ここに画像の説明を挿入します

9つの色成分

9.1 インストール
pip install colorama # 安装组件
9.2 Python にインポートし、色付きのテキストを印刷します。
from colorama import init, Fore, Back, Style

# 初始化 colorama
init()

# 使用不同的颜色打印文本
print(Fore.RED + '红色的文本')
print(Back.GREEN + '绿色背景的文本')
print(Fore.YELLOW + Back.BLUE + '黄色文字和蓝色背景的文本')

# 重置颜色(切换回默认颜色)
print(Style.RESET_ALL + '这是默认颜色的文本')

10 パスワードブラストスクリプトを読む

import crypt
import colorama

# 定义密码
shaw_line = "root:$y$j9T$b8VajevNPKrgCkOfpJaZf.$87w.72igkRq6sPzbDOnaqTh4o3l4TkDWEagTPHq4K2C:19597:0:99999:7:::"

# 以:进行分割,组合密文组合,取下标1的值
crypt_text = shaw_line.split(":")[1]

print(crypt_text)
#密码中获取盐值
salt = crypt_text[0:crypt_text.rindex("$")]

file_path = "/home/kali/mytestcode/test.text"
with open( file=file_path, mode= "r") as f:
    for line in f:
        passwd = line.strip() 
        print(f"\r{colorama.Fore.RED}[-] Trying password: {passwd}", end= "")

        # passwd = "weiwei"
        # 明文和盐值组合密文
        new_crypt_text = crypt.crypt(passwd, salt)
        # 对比是否相等_crypt
        if new_crypt_text == crypt_text:
            print(f"{colorama.Fore.RED}[+] PASSWORD FOUND:{passwd}" )
    print(f"[-] pwssword not fo")

11 ホスト ping パケットを送信 (ホストは生きている)

11.01scapy パッケージをインストールする
pip show scapy
11.02 インストールパッケージのバージョンを確認する
import scapy
print(scapy.__version__)
11.03 ping コード
from scapy.layers.inet import *

netmast = "10.9.75."
src="10.9.75.160"

for i in range(1,5):
    dst = f"{netmast}{i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1)
    if res and res.type == 0:
        print(f"{dst} is ALIVE!")

結果を出力します。

Received 46 packets, got 0 answers, remaining 1 packets
10.9.75.4
Begin emission:
WARNING: Mac address to reach destination not found. Using broadcast.
Finished sending 1 packets.
....................................................................................................................................................

12 ホスト生存コードの最適化

12.1 警告情報をシールドし、ポイントを表示しない 詳細 = False
屏蔽WARNING的信息
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)  # 只有报错时才显示



不显示点
res = sr1(pkt, timeout=1, verbose= False)

最終的な最適化後:

from scapy.layers.inet import *
from colorama import init, Fore, Back, Style

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

netmast = "10.9.75."  # 遍历扫描地址前缀
src="10.9.75.160"   # 自己的主机


for i in range(1,5):
    dst = f"{netmast}{i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1, verbose= False)
    if res and res.type == 0:
        print(Fore.RED + f"{dst} is ALIVE!")  # Fore.RED增加颜色
 

結果を出力します。

10.9.75.1 is ALIVE!

1ファイル読み込み

参考動画:ダークホースのナニーレベル動画

1.1 read() メソッド:
文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
1.2 readlines() メソッド:

eadlines は、ファイル全体の内容を 1 行ずつ一度に読み取り、各行のデータを要素としたリストを返します。

f=open('python.txt')
content=f.readlines()
print(content) # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']

#关闭文件
f.close()
1.3 read() の使用例:
1.3.1 text.txt ファイルの内容は次のとおりです。
在岁月的轮回里,
藏着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.3.2 py実行可能ファイル
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))

print(f"读取10个字节:{
      
      f.read(10)}")
print(f"read方法读取全部内容的结果:{
      
      f.read()}")
1.3.3 結果の出力: 注: read() メソッドを 2 回実行します。2 回目は、read 後の添え字の読み取りを続けます。
<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,
藏
read方法读取全部内容的结果:着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.4 for ループはファイル行を読み取ります
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))
for line in f:
    print(f"读取10个字节:{
      
      line}")
f.close()

結果を出力します。

<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,

读取10个字节:藏着世间的种种美,

读取10个字节:高山巍峨耸入云霄,

读取10个字节:江河奔腾破浩渺。
1.5 特定の文字を読んで、出現する回数を数える練習をする
=====test.txt内容========
itheima itcast python
itheima python itcast
beijing shanghai itheima
=======思路======= 
第一种. read() , count("itheima")
第二种.一行行的读取文件 按照空格切分,统计itheima的次数
===============
方式一:
f = open("D:/test.txt","r", encoding="UTF-8")
content = f.read()  # 读取全部内容
count = content.count("itheima")
print(f"的在文件中出现了:{
      
      count}次")
f.close()

打印结果: 3次

方式二:
f = open("D:/test.txt","r", encoding="UTF-8")
count = 0
for line in f:
	line = line.strip()
	words = line.split(" ") # 以空格分隔
	print(words)  # 打印每一行有个换行符 ['itheima', 'itcast', 'python\n']...,使用strip()
	for word in words:
		if word == "itheima":
			count += 1
print(count)
f.close()

打印结果出现:3
1.4 読み取り読み取り方法の概要
操作する 関数
ファイル オブジェクト = open(ファイル、モード、エンコーディング) ファイルを開いてファイルオブジェクトを取得します
ファイル object.read(num) num を指定せずに、指定したバイト長を読み取り
、ファイル全体を読み取ります。
ファイル object.readline() 一行読む
ファイル object.readlines() すべての行を読んでリストを取得する
ファイルオブジェクトの行の場合 ファイル オブジェクトの for 行 for ループ ファイル行、一度に 1 行のデータを取得します
ファイル object.close() ファイルオブジェクトを閉じる
open() を f として使用 open 構文でファイルを開き、自動的に閉じることができます

2. ファイルの書き込み

知らせ:

write が直接

flash が呼び出されるとき

#1.打开文件
f=open('python.txt','w')

#2.文件写入
f write(hello world)

#3.内容刷新
f.flush()
2.1 write() ファイルの書き込み:

1. オープン関数モードを使用してファイルを書き込みます。

2. 書き込みメソッドは次のとおりです:
wirte()、コンテンツの書き込み
フラッシュ()、ハードディスクへのコンテンツのリフレッシュ

注:
w モードでは、ファイルが存在しない場合、新しいファイルが作成されます。w
モードでは、ファイルが存在する場合、元の内容はクリアされます
。close() メソッドには、flush() メソッドの機能があります。

2.1.1 bill.txtの内容
周轮,2022-01-01,100000,消费,正式
周轮,2022-01-02,300000,收入,正式
周轮,2022-01-03,100000,消费,测试
2.1.2 py実行ファイル、バックアップファイルの書き込み
fr =open("D:/test.txt", "r", encoding="UTF-8")  # 打开文件得到文件对象,准备读取
fw =open("D:/bill.txt.bak", "w", encoding="UTF-8")  #打开文件得到文件对象,准备写入

# for 循环读取文件
for line in fr:
	line = line.strip()
	if line.split(",")[4] == "测试": # 判断内容,将满足的内容写出
		continue
	fw.write(line)  # 将内容写出去
	fw.write("\n")  #由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fr.close()
fw.close()   # close内置flush()功能,flush將内存的文件写入磁盘

3. ファイル添付コンテンツ

コンテンツを追加するモード

#1.打开文件,通过a模式打开即可
f=open('python.txt', 'a')

#2.文件写入
f.write('hello world')

#3.内容刷新
f.flush()

注:
a モードではファイルが存在しない場合はファイルが作成され、
a モードではファイルが存在する場合はファイルが末尾に追加されます。

3.1 ファイルがない場合、コンテンツを追加するファイルが自動的に作成されます。例:
#打开文,不存在文件
f = open("D:/test1.txt","a",encoding="UTF-8")  #write写入
f.write("heima程序员")
f.flush()  #flush新
f.close()  #close关闭

# 打开路径,自动test1.txt文件及追加了内容
3.2 続けて追加コンテンツを書き込みます。
f = open("D:/test1.txt", "a", encoding="UTF-8")  #打开一个存在的文件

f.write("\npython最佳保姆式") # write写入 \n换行

f.close()  #close关闭
3.3 概要
1追加写入文件使用open函数的”a”模式进行写入

2.追加写入的方法有(和w模式一致):
	wirte(),写入内容
	flush(),刷新内容到硬盘中
	
3.注意事项:
	a模式,文件不存在,会创建新文件
	a模式,文件存在,会在原有内容后面继续写入
	可以使用”\n”来写出换行符

4 例外処理

参考動画:ダークホースのナニーレベル動画

珍しい特徴

例外は推移的です

関数 func01 で例外が発生し、その例外がキャッチされて処理されなかった場合、

例外は関数 func02 に渡されます。func02 が例外をキャッチして処理しない場合、

main 関数はこの例外をキャッチします。これは例外の推移性です。

注:
すべての関数が例外をキャッチしない場合、プログラムは
外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。
エラーを報告外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

def func1():
    print("func1 开始执行")
    num=1/0
    #肯定有异常,除以0的异常
    print("func1 结束执行")

# 定义一个无异常的方法,调用上面的方法
def func2():
    print("func2 开始执行")
    func1()
    print("func2 结束执行")

#定义一个方法,调用上面的方法
def main():
    try:
        func2()
    except Exception as e:
        print(f"出现异常了,异常的信息是:{
      
      e}")

main()

印刷結果

func2 开始执行
func1 开始执行
出现异常了,异常的信息是:division by zero

5 モジュールのインポートとエクスポート

参考動画:Dark Horse高画質ナニーレベル動画

モジュールは使用前にインポートする必要があります。インポートの構文は次のとおりです。

[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]   # from是针对模块中某个方法去使用

モジュールをインポートする方法:

常用的组合形式如:
    import 模块名
    from   模块名  import  类、变量、方法等
    from   模块名  import  *
    import 模块名  as  别名
    from   模块名  import  功能名  as  别名
5.1 インポートの基本構文:
import 模块名
import 模块名1,模块名2

模块名.功能名()
5.2 インポートの場合: 時間モジュールをインポートするには time.sleep() を呼び出す必要があります
#导入时间模块
import time

print("开始")
#让程序睡眠1秒(阻塞)
time.sleep(1)
print("结束")
5.3 基本構文から:

モジュール内のメソッドに使用

from 模块名 import 功能名
功能名()

注意:
from time import *  # 是将某块中所有方法都导入
5.4 ケースから: time モジュールに sleep メソッドをインポートし、sleep 呼び出しを直接書くことができます
#导入time时间模块中的sleep方法
from time import sleep

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")
5.5 ケースから: time モジュールの import *

ケース: time モジュール内のすべてのメソッドをインポートすると、スリープ コールを直接記述できます。

#导入时间模块中所有的方法
from time import *

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

6 カスタムモジュール

参考動画:Dark Horse ナニーレベルの高画質動画

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

6.1 外部インポートでは関数を単独で実行することはできません
my_modulel.py ファイル
def test(a, b):
	print(a + b)

if __name__ == '__main__': # 加入这个函数,也可以单独测试运行定义的函数
	test(1,2)
6.2 [__all__]変数

全て書かなくても__all__使用可能 全て書いてもリスト内の機能のみ使用可能 全ては*のみに限定

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

6.3 概要
 1.如何自定义模块并导入?
    在Python代码文件中正常写代码即可,通过import、from关键字和导
    入Python内置模块一样导入即可使用。

2._main_变量的功能是?
    if __main__==“_main_”表示,只有当程序是直接执行的才会进入
    if内部,如果是被导入的,则if无法进入
    
3.注意事项
	不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

7 カスタム Python パッケージ

参考ビデオ:ダークホースのナニーレベルのビデオ

基于Python模块,我们可以在编写代码的时候,导入许
多外部代码来丰富功能。
但是,如果Python的模块太多了,就可能造成一定的混
乱,那么如何管理呢?
通过Python包的功能来管理。
7.1 手順は次のとおりです

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

7.2 pycharmの基本手順(パッケージの作成)

プロジェクトのルートディレクトリを選択 -> [新規]を右クリック -> [Pythonパッケージ] -> パッケージ名(my_packageなど)を入力 -> OK -> 新しい関数モジュールを作成

注: (my_package) などの新しいパッケージを作成した後、パッケージ内にファイルが自動的に作成されます__init__.py。このファイルは、次のようなパッケージのインポート動作を制御します。 [__all__ =['my_module1']]

パッケージ内に新しいファイル *.py を作成できます --> それぞれの機能 *.py ファイル

7.3 カスタムパッケージのインポート
import my_package.my_modulel
import my_package.my_module2

my_package.my_modulel.info_print1()   #使用包里面函数


或者优化导入:
import my_package.my_module2 import info_print1

info_print1()   #使用包里面函数
7.4 概要
1.什么是Python的包?
  包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通
  过包,在逻辑上将一批模块归为一类,方便使用。
    
2._init_.py文件的作用?
  创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是
  Python的包,而非普通的文件夹。
	
3.all变量的作用?
	同模块中学习到的是一个作用,控制import*能够导入的内容

8 つのサードパーティ パッケージ

参考ビデオ:ダークホースのナニーレベルのビデオ

8.1 サードパーティパッケージとは何ですか?

パッケージには多数の Python モジュールを含めることができ、各モジュールには多くの関数が含まれることがわかっています。
したがって、パッケージは同じ種類の関数の集合であると考えることができます。

Python プログラムのエコシステムには、開発効率の向上に大きく役立つサードパーティ パッケージ (非公式 Python) が多数あります。たとえば、科学技術計算でよく使用される numpy パッケージ データ分析でよく使用さ
れる
pandas
パッケージデータ計算で使用される: pyspark、apache-flink パッケージ
グラフィック視覚化で一般的に使用される: matplotlib、pyecharts
人工知能で一般的に使用される: tensorflow

8.2 サードパーティパッケージのインストール

サードパーティのパッケージをインストールする-pip

サードパーティ パッケージのインストールは非常に簡単で、Python の組み込み pip プログラムを使用するだけです。

久しぶりにコマンド プロンプト プログラムを開き、「
pipinstall パッケージ名」と入力して
、ネットワーク経由でサードパーティ パッケージをすばやくインストールします。

命令提示符cmd进行安装:

C:\Users\javac>pip install numpy
8.3 pip のネットワーク最適化

pip はパッケージをダウンロードするために海外の Web サイトに接続するため、速度が非常に遅くなる場合があります。
次のコマンドを使用して国内 Web サイトに接続し、パッケージをインストールできます:
pip install -i https://pyp.ituna.tsinghua.edu.cn/simple package name

命令提示符cmd
C:\Users\javac> pip install	 -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

https://pypi.tuna.tsinghua.edu.cn/simple は清華大学が提供する Web サイトで、pip プログラムがサードパーティのパッケージをダウンロードできるようにします。

インストールが成功したことを確認するテスト

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

8.4 pycharm はサードパーティのパッケージをインストールします
8.4.1 右下隅の Python をクリック --> インター設定を選択します

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

8.4.2 「+」をクリックします。

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

8.4.3 選択後、インストールを選択→ウィンドウを閉じる→バックグラウンドでダウンロードを確認します。

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

8.4.4 バックグラウンドでのダウンロードステータス

外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします。

9つの色成分

9.1 インストール
pip install colorama # 安装组件
9.2 Python にインポートし、色付きのテキストを印刷します。
from colorama import init, Fore, Back, Style

# 初始化 colorama
init()

# 使用不同的颜色打印文本
print(Fore.RED + '红色的文本')
print(Back.GREEN + '绿色背景的文本')
print(Fore.YELLOW + Back.BLUE + '黄色文字和蓝色背景的文本')

# 重置颜色(切换回默认颜色)
print(Style.RESET_ALL + '这是默认颜色的文本')

10 パスワードブラストスクリプトを読む

import crypt
import colorama

# 定义密码
shaw_line = "root:$y$j9T$b8VajevNPKrgCkOfpJaZf.$87w.72igkRq6sPzbDOnaqTh4o3l4TkDWEagTPHq4K2C:19597:0:99999:7:::"

# 以:进行分割,组合密文组合,取下标1的值
crypt_text = shaw_line.split(":")[1]

print(crypt_text)
#密码中获取盐值
salt = crypt_text[0:crypt_text.rindex("$")]

file_path = "/home/kali/mytestcode/test.text"
with open( file=file_path, mode= "r") as f:
    for line in f:
        passwd = line.strip() 
        print(f"\r{
      
      colorama.Fore.RED}[-] Trying password: {
      
      passwd}", end= "")

        # passwd = "weiwei"
        # 明文和盐值组合密文
        new_crypt_text = crypt.crypt(passwd, salt)
        # 对比是否相等_crypt
        if new_crypt_text == crypt_text:
            print(f"{
      
      colorama.Fore.RED}[+] PASSWORD FOUND:{
      
      passwd}" )
    print(f"[-] pwssword not fo")

11 ホスト ping パケットを送信 (ホストは生きている)

11.01scapy パッケージをインストールする
pip show scapy
11.02 インストールパッケージのバージョンを確認する
import scapy
print(scapy.__version__)
11.03 ping コード
from scapy.layers.inet import *

netmast = "10.9.75."
src="10.9.75.160"

for i in range(1,5):
    dst = f"{
      
      netmast}{
      
      i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1)
    if res and res.type == 0:
        print(f"{
      
      dst} is ALIVE!")

結果を出力します。

Received 46 packets, got 0 answers, remaining 1 packets
10.9.75.4
Begin emission:
WARNING: Mac address to reach destination not found. Using broadcast.
Finished sending 1 packets.
....................................................................................................................................................

12 ホスト生存コードの最適化

12.1 警告情報をシールドし、ポイントを表示しない 詳細 = False
屏蔽WARNING的信息
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)  # 只有报错时才显示



不显示点
res = sr1(pkt, timeout=1, verbose= False)

最終的な最適化後:

from scapy.layers.inet import *
from colorama import init, Fore, Back, Style

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

netmast = "10.9.75."  # 遍历扫描地址前缀
src="10.9.75.160"   # 自己的主机


for i in range(1,5):
    dst = f"{
      
      netmast}{
      
      i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1, verbose= False)
    if res and res.type == 0:
        print(Fore.RED + f"{
      
      dst} is ALIVE!")  # Fore.RED增加颜色
 

結果を出力します。

10.9.75.1 is ALIVE!

おすすめ

転載: blog.csdn.net/weixin_42786460/article/details/133098314