使用 Python 实现PPPOE拨号连接,拿来即用!

使用 Python 实现PPPOE拨号连接

PPPOE大家小时候应该都用过,输入宽带账号和密码后,会向运营商请求一个公网IP,通过此IP访问互联网,小编身边有几个朋友是做自媒体工作室的,不同平台对于IP的要求严格苛刻,需要做到单号单IP,当然,这些都是题外话了,咱们直接进入正文!完整的代码我已放到文章最末尾

一、模块导入

import subprocess
import sys

subprocess 模块

subprocess 模块允许我们通过 Python 程序执行外部命令或程序。在本代码中,subprocess 用于执行拨号命令和获取 IP 地址。简单来说就是python的小跟班帮其传递指令给系统,本文的宽带连接就是通过subprocess 底层传输拨号指令的

新手小白,可以看下:subprocess 模块允许 Python 程序生成新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。换句话说,subprocess 使得 Python 能够与系统的命令行环境进行交互,执行外部命令或程序,并处理其输出。

sys 模块

sys 模块提供了一些与 Python 解释器紧密相关的功能。在本代码中,sys 用于在发生错误时退出程序。

二、定义拨号连接函数:dial_connection

def dial_connection(username, password):
    # 默认的拨号连接名称
    connection_name = "宽带连接"
    
    # 构建拨号命令
    command = f"rasdial {connection_name} {username} {password}"
    
    try:
        # 执行拨号命令
        result = subprocess.check_output(command, stderr=subprocess.STDOUT, text=True, shell=True)
        print(result)
        
        # 获取拨号后的IP地址
        ip_command = "ipconfig | findstr /i \"IPv4 Address\""
        ip_result = subprocess.check_output(ip_command, stderr=subprocess.STDOUT, text=True, shell=True)
        print(ip_result)
        
    except subprocess.CalledProcessError as e:
        # 拨号失败,打印错误信息
        print(f"An error occurred: {e.output}")
        sys.exit(1)

1. 默认的拨号连接名称

connection_name = "宽带连接"

这里定义了默认的拨号连接名称为“宽带连接”。这是 Windows 系统中常见的拨号连接名称,用户可以根据实际情况修改。小编提示:一般Windows系统中默认拨号名称是:宽带连接,大家在写的时候可以查看

2. 构建拨号命令

command = f"rasdial {connection_name} {username} {password}"

使用字符串格式化构建拨号命令。rasdial 是 Windows 下用于拨号网络连接的命令行工具,后跟连接名称、用户名和密码。

3. 执行拨号命令

result = subprocess.check_output(command, stderr=subprocess.STDOUT, text=True, shell=True)
print(result)
  • subprocess.check_output:执行构建的命令,并捕获其输出。
  • 参数说明
  • command:要执行的命令。
  • stderr=subprocess.STDOUT:将标准错误合并到标准输出中。
  • text=True:以字符串形式返回输出,而不是字节。
  • shell=True:通过 shell 执行命令,这在执行带有管道或重定向的命令时是必要的。
  • 执行成功后,输出拨号命令的结果。

    4. 获取拨号后的 IP 地址

    ip_command = "ipconfig | findstr /i \"IPv4 Address\""
    ip_result = subprocess.check_output(ip_command, stderr=subprocess.STDOUT, text=True, shell=True)
    print(ip_result)
    
  • 构建 IP 获取命令:使用 ipconfig 获取网络配置信息,并通过 findstr 过滤出包含 “IPv4 Address” 的行。
  • 执行命令并输出结果:同样使用 subprocess.check_output 执行命令,并打印结果以显示当前 IP 地址。
  • 5. 错误处理

    except subprocess.CalledProcessError as e:
        # 拨号失败,打印错误信息
        print(f"An error occurred: {e.output}")
        sys.exit(1)
    
  • 捕获异常:如果拨号命令执行失败,subprocess.check_output 会抛出 CalledProcessError 异常。
  • 打印错误信息:输出错误信息,帮助用户了解失败原因。
  • 退出程序:使用 sys.exit(1) 退出程序,并返回状态码 1 表示发生错误。此处就是咱们开头引入的sys
  • 三、定义主函数:main

    def main():
        # 输入用户名和密码
        username = input("Enter your username: ")
        password = input("Enter your password: ")
        
        # 进行拨号连接
        dial_connection(username, password)
    

    1. 输入用户名和密码

    username = input("Enter your username: ")
    password = input("Enter your password: ")
    

    使用 input 函数提示用户输入拨号连接所需的用户名和密码。这些输入将传递给 dial_connection 函数以建立连接。小编提示:用户在终端上填写宽带拨号的账号和密码,此处是明文显示

    2. 进行拨号连接

    dial_connection(username, password)
    

    这里我们调用前面定义的 dial_connection 函数,传入用户输入的用户名和密码,开始愉快的拨号过程。

    四、程序入口

    if __name__ == "__main__":
        main()
    

    这段代码确保当脚本作为主程序运行时,调用 main 函数。它防止在脚本被导入为模块时自动执行 main 函数。小编提示:如果大家后期想做卡密系统(类似于市面上的单机单卡验证系统)在这个入口处做一扇门,如果大家感兴趣我下一期写一个文章专门讲解

    五:完整代码

    完整的代码我放这了,运行后输入宽带的账号和密码就可以正常切网(ipv4),

    import subprocess
    import sys
    
    def dial_connection(username, password):
        # 默认的拨号连接名称
        connection_name = "宽带连接"
        
        # 构建拨号命令
        command = f"rasdial {connection_name} {username} {password}"
        
        try:
            # 执行拨号命令
            result = subprocess.check_output(command, stderr=subprocess.STDOUT, text=True, shell=True)
            print(result)
            
            # 获取拨号后的IP地址
            ip_command = "ipconfig | findstr /i \"IPv4 Address\""
            ip_result = subprocess.check_output(ip_command, stderr=subprocess.STDOUT, text=True, shell=True)
            print(ip_result)
            
        except subprocess.CalledProcessError as e:
            # 拨号失败,打印错误信息
            print(f"An error occurred: {e.output}")
            sys.exit(1)
    
    def main():
        # 输入用户名和密码
        username = input("Enter your username: ")
        password = input("Enter your password: ")
        
        # 进行拨号连接
        dial_connection(username, password)
    
    if __name__ == "__main__":
        main()
    

    以上就是本期内容:使用 Python 实现拨号连接

    欢迎大家在评论区留言

    作者:RENKEKJI

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用 Python 实现PPPOE拨号连接,拿来即用!

    发表回复