使用 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)
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