作者: k, k

  • 让任意的cmd窗口都可执行sc命令,不需要以管理员权限执行cmd窗口,执行完以下代码之后,需要重启电脑

    要将HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\下的EnableLUA项的十六进制值改为0,你可以使用以下reg add命令:

    reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableLUA /t REG_DWORD /d 0 /f

    这里是命令各部分的解释:

    • reg add:这是用来添加注册表项或修改现有注册表项值的命令。
    • "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System":这是你想要修改的注册表项的完整路径。注意,因为路径包含反斜杠\,所以整个路径需要被引号包围起来。
    • /v EnableLUA/v参数后面跟的是你想要修改的注册表项的名称,这里是EnableLUA
    • /t REG_DWORD/t参数用来指定注册表项的类型。对于EnableLUA,它是一个DWORD(32位无符号整数)类型的值,所以这里使用REG_DWORD
    • /d 0/d参数后面跟的是你想要设置的值。对于EnableLUA0表示禁用用户账户控制(User Account Control,UAC)的提示,而1表示启用它。
    • /f:这个可选参数用来强制覆盖现有值,而不会提示用户确认。

    请注意,修改HKEY_LOCAL_MACHINE下的注册表项通常需要管理员权限。因此,你可能需要以管理员身份运行命令提示符(右键点击命令提示符图标,选择“以管理员身份运行”)来执行这个命令。此外,修改系统注册表项可能会影响系统的稳定性和安全性,所以在进行此类更改之前,请确保你了解这些更改的潜在后果,并考虑备份你的注册表或整个系统。

  • 使用sc注册服务

    在 Windows 的 SC(Service Control)命令行工具中,要创建一个服务并设置启动参数和描述,你需要分别指定 binPath  desc 参数。但是,请注意,binPath 参数的值必须是一个完整的命令行字符串,包括任何必要的启动参数。

    以下是一个例子,展示如何创建一个名为 ceshi 的服务,并设置其启动参数和描述:

    sc create ceshi binPath= "D:\ceshi\ceshi.exe 参数1 参数2" type= own start= auto displayname= "ceshi 服务"
    sc description ceshi "这是ceshi服务的描述"

    在这个例子中,参数1 和 参数2 是你想要传递给 ceshi.exe 的启动参数。请确保这些参数用空格分隔,并且整个 binPath 的值(包括路径和参数)用双引号括起来,以防止路径或参数中的空格导致解析错误。

    displayname 参数设置了服务在服务列表中的显示名称,而 description 参数则设置了服务的描述。

    确保你有足够的权限来创建服务(通常需要管理员权限)。此外,请检查路径和文件名是否正确,以及服务是否能够在该路径下正确执行。

    最后,如果 ceshi.exe 需要以特定的用户身份运行(不是默认的 LocalSystem 账户),你可能还需要使用 obj= 参数来指定运行服务的账户。

    完成创建后,你可以使用 sc queryex ceshi 命令来查看服务的详细信息,确保它已正确设置。如果需要进一步的配置或管理,可以使用 sc config 命令进行。

  • frp内网穿透

    参考

    https://blog.csdn.net/qq_36981760/article/details/115713179

    下载

    Linux/Mac OS

    wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz

    Windows

    https://github.com/fatedier/frp/releases

    公网主机里的frp文件夹可手动把frpc开头的文件全部删除

    rm -rf frpc*

    内网主机里的frp文件夹可手动把frps开头的文件全部删除

    rm -rf frpc*

    脚本配置

    配置脚本请使用无注释版本,防止脚本运行出错

    公网主机

    打开服务器端配置文件

     vim ./frps.ini
     # 我的填写内容如下:
     [common]
     bind_port = 7000# 服务端与客户端通信端口
     dashboard_port = 7500# 后台管理端口
     dashboard_user = admin# 后台登录用户名
     dashboard_pwd = admin
     
     vhost_http_port = 7002# http穿透端口
     vhost_https_port = 7003# https穿透端口
     max_pool_count = 50
     
     token = aaa123# 身份验证令牌,frpc要与frps一致
     tcp_mux = true
     
     log_file = /usr/local/frp/frps.log# 日志相关
     log_level = info
     log_max_days = 3
     
     authentication_timeout = 0# 服务器与客户端时间相差15min会连接失败,0表示不验证
     subdomain_host = test.xyz# 注册的域名
     privilege_mode = true

    公网主机无注释版本

     [common]
     bind_port = 7000
     dashboard_port = 7500
     dashboard_user = admin
     dashboard_pwd = admin
     
     vhost_http_port = 7002
     vhost_https_port = 7003
     max_pool_count = 50
     
     token = aaa123
     tcp_mux = true
     
     log_file = /usr/local/frp/frps.log
     log_level = info
     log_max_days = 3
     
     authentication_timeout = 0
     subdomain_host = test.xyz
     privilege_mode = true

    注意:访问的端口一定要开放

    启动frps

    前台启动

    ./frps -c ./frps.ini

    后台启动

    ./frps -c ./frps.ini &

    内网主机

    打开客户端配置文件

     vim ./frpc.ini
     # 我的填写内容如下:
     [common]
     server_addr = 10.10.xxx.xxx# 公网服务器ip
     server_port = 7000# 客户端与公网服务端通信端口
     
     token = aaa123# 令牌,与公网服务端保持一致
     tcp_mux = true
     
     log_file = /usr/local/frp/frpc.log# 日志相关
     log_level = info
     log_max_days = 3
     authentication_timeout = 0# 服务器与客户端时间相差15min会连接失败,0表示不验证
     
     # 添加ssh节点
     [ssh] 
     type = tcp
     local_ip = 192.168.xxx.xxx# 内网主机本地的服务ip
     local_port = 22
     remote_port = 7001# 指明由公网服务器的7001端口代理
     
     # 添加web节点
     [web01]
     type = http
     local_ip = 192.168.xxx.xxx# 内网主机本地的服务ip
     local_port = 8080# 本地8080端口可以通公网服务器7002端口访问,这里我的8080跑着tomcat
     custom_domains = test.xyz# 注册的域名

    内网主机无注释版本

     [common]
     server_addr = 10.10.xxx.xxx
     server_port = 7000
     
     token = aaa123
     tcp_mux = true
     
     log_file = /usr/local/frp/frpc.log
     log_level = info
     log_max_days = 3
     authentication_timeout = 0
     
     [ssh] 
     type = tcp
     local_ip = 192.168.xxx.xxx
     local_port = 22
     remote_port = 7001
     
     [web01]
     type = http
     local_ip = 192.168.xxx.xxx
     local_port = 8080
     custom_domains = test.xyz

    启动frpc

    前台启动

    ./frpc -c ./frpc.ini

    后台启动

    ./frpc -c ./frpc.ini &

    frp开机自启动

    公网主机

    创建并编辑frp.service文件(有时候需要手动创建system文件夹)

    vim /usr/lib/systemd/system/frps.service

    vim找不到就试试vi

    vi /usr/lib/systemd/system/frps.service

    frps.service文件内容

    注意,service 文件不支持行内注释!!!注释必须单独一行

     [Unit]
     Description=frps
     After=network.target
      
     [Service]
     TimeoutStartSec=30
     ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
     ExecStop=/bin/kill $MAINPID
      
     [Install]
     WantedBy=multi-user.target

    把相关文件转移到/usr/local/bin/文件夹下,在/usr/local/bin/文件夹下创建frp文件夹

    mkdir /etc/frp/

    移动刚刚启动测试成功的frp文件夹下的所有frps开头原文件到/usr/local/bin/frp文件夹下

    mv * /usr/local/bin/frp/

    创建一个名为frps的快捷方式到/usr/local/bin/目录下

    ln -s /etc/frp/frps /usr/local/bin/frps

    设置开机启动

    systemctl enable frps

    启动frps

    systemctl start frps

    查看自启动服务状态

    systemctl status frps

    部分服务器上,可能需要加 .service 后缀来操作,即

     systemctl enable frps.service
     systemctl start frps.service
     systemctl status frps.service
    内网主机

    同理,创建并编辑自启动服务文件,移动相关文件,启动命令。

    创建并编辑frp.service文件(有时候需要手动创建system文件夹)

    vim /usr/lib/systemd/system/frpc.service

    vim找不到就试试vi

    vi /usr/lib/systemd/system/frpc.service

    frpc.service文件内容

    注意,service 文件不支持行内注释!!!注释必须单独一行

    [Unit]
    Description=frpc
    After=network.target
     
    [Service]
    TimeoutStartSec=30
    ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.ini
    ExecStop=/bin/kill $MAINPID
     
    [Install]
    WantedBy=multi-user.target

    把相关文件转移到/usr/local/bin/文件夹下,在/usr/local/bin/文件夹下创建frp文件夹

    mkdir /etc/frp

    移动刚刚启动测试成功的frp文件夹下的所有frpc开头原文件到/usr/local/bin/frp文件夹下

    mv * /etc/frp/

    创建一个名为frpc的快捷方式到/usr/local/bin/目录下

    ln -s /etc/frp/frpc /usr/local/bin/frpc

    设置开机启动

    systemctl enable frpc

    启动frpc

    systemctl start frpc

    查看自启动服务状态

    systemctl status frpc

    部分服务器上,可能需要加 .service 后缀来操作,即

    systemctl enable frpc.service
    systemctl start frpc.service
    systemctl status frpc.service

    注意

    目前frp内网穿透并没有一个域名映射多个端口的使用方法,

    只能一个多个域名映射一个端口。(你可以在服务商那里买一个域名,解析多个二级域名即可)

    阿里云如何添加二级域名?

    https://www.cnblogs.com/ningqing2015/articles/9207195.html

    腾讯云如何添加二级域名?

    https://www.cnblogs.com/mmzs/p/9989373.html

    可能的问题

    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===

    https://blog.csdn.net/leenhem/article/details/117817641

    推荐

    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中 https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=4d91ebf696f41e28d6f2fd7a542d7c8c&from=console

  • python for遍历处列表的索引和内容

    在Python中,你可以使用for循环来遍历列表的索引和内容。通常,我们使用enumerate()函数来实现这个目的,它返回列表的索引和对应的值。下面是一个示例:

    my_list = ['apple', 'banana', 'cherry']  
      
    for index, content in enumerate(my_list):  
        print(f"Index: {index}, Content: {content}")

    这段代码将输出:

    Index: 0, Content: apple  
    Index: 1, Content: banana  
    Index: 2, Content: cherry

    enumerate()函数会生成一个枚举对象,该对象在每次迭代时产生一个包含索引和值的元组。在for循环中,我们可以直接解包这个元组到变量indexcontent中。

    如果你只想获取索引,可以使用range()函数结合列表长度来实现:

    my_list = ['apple', 'banana', 'cherry']  
      
    for index in range(len(my_list)):  
        content = my_list[index]  
        print(f"Index: {index}, Content: {content}")

    这段代码的输出与上一个示例相同,但它没有使用enumerate()函数,而是直接通过索引访问列表元素。这种方法在性能上可能稍微差一些,因为每次迭代都需要通过索引访问列表元素,而enumerate()函数在内部进行了优化。在大多数情况下,使用enumerate()是更简洁、更推荐的做法。

  • 批处理获取当前文件夹以及子文件夹的所有文件和路径,输出到一个txt文件中

    要将批处理脚本中获取的文件和路径输出到一个文本文件中,你可以使用重定向操作符 > 或追加操作符 >>。下面是一个修改后的脚本示例,它会将输出追加到一个名为 output.txt 的文本文件中:

    @echo off  
    setlocal enabledelayedexpansion  
      
    :: 设置当前目录变量和输出文件路径  
    set "currentDir=%cd%"  
    set "outputFile=output.txt"  
      
    :: 确保输出文件存在,如果不存在则创建  
    if not exist "%outputFile%" type nul > "%outputFile%"  
      
    :: 遍历当前目录及其所有子目录,并将文件路径追加到输出文件中  
    for /r "%currentDir%" %%F in (*) do (  
        echo %%F>> "%outputFile%"  
    )  
      
    echo 文件列表已保存到 %outputFile%  
    endlocal

    这个脚本做了以下几件事:

    1. 使用@echo off来关闭命令回显,使输出更整洁。
    2. 使用setlocal enabledelayedexpansion来启用延迟变量扩展,这样我们就可以在for循环内部使用!来访问变量。
    3. 使用set "currentDir=%cd%"来获取当前目录的路径,并将其存储在变量currentDir中。
    4. 使用for /r "%currentDir%" %%F in (*)来递归遍历当前目录及其所有子目录中的文件。这里,%%F代表每个文件的完整路径。
    5. for循环内部,使用echo %%F来输出每个文件的完整路径。
    6. 使用endlocal来结束局部环境设置。

    在这个脚本中:

    • set "outputFile=output.txt" 设置了输出文件的名称。
    • if not exist "%outputFile%" type nul > "%outputFile%" 确保输出文件存在。如果文件不存在,它会创建一个空文件。
    • echo %%F>> "%outputFile%" 将每个文件的完整路径追加到输出文件的末尾。>> 操作符用于追加内容到文件中,而不是覆盖文件内容。如果你希望每次运行脚本时都覆盖输出文件的内容,可以使用单个 > 操作符。

    保存这个脚本为 .bat 文件,并在需要获取文件和路径的目录中运行它。脚本执行完毕后,你将在相同的目录中找到一个名为 output.txt 的文件,其中包含了所有文件和路径的列表。

  • python输出此电脑所有的磁盘盘符

    在Python中,可以使用os模块来获取操作系统相关的信息,包括所有的磁盘盘符。但是,os模块并没有直接提供获取所有磁盘盘符的功能。不同的操作系统(如Windows、Linux、macOS)处理磁盘的方式也不同,所以获取磁盘盘符的方法也会有所不同。

    以下是一个在Windows系统上获取所有磁盘盘符的示例:

    import os  
    import win32api  
      
    def get_all_drives():  
        drives = win32api.GetLogicalDriveStrings()  
        drives = drives.split('\000')[:-1]  # 删除最后一个空字符串  
        return drives  
      
    print(get_all_drives())

    在这个示例中,我们使用了win32api模块的GetLogicalDriveStrings函数来获取所有的逻辑驱动器字符串。然后,我们使用字符串的split方法将这个字符串分割成一个列表,每个元素都是一个磁盘盘符。最后,我们删除列表中的最后一个空字符串,并返回这个列表。

    注意:这个示例只在Windows系统上有效。如果你正在使用Linux或macOS,那么你需要使用不同的方法来获取磁盘信息。在Linux上,你可以解析/proc/mounts/etc/fstab文件来获取磁盘信息。在macOS上,你可以使用diskutil list命令来获取磁盘信息,但这可能需要使用subprocess模块来执行外部命令。

  • python读取一个txt文件,获取每一行并且过滤出mkv文件名、mp4文件名、ogg文件名

    # -*- coding: utf-8 -*-
    # 假设你的txt文件名为files.txt,每行包含一个文件名  
    file_path = 'filenames.txt'  
    
    # 打开文件并读取所有行  
    with open('filenames.txt', 'r', encoding='gbk') as file:  
        lines = file.readlines()  
      
    # 检查最后一行是否为空白行(只包含换行符或空格)  
    if lines and lines[-1].strip() == '':  
        # 如果是,则删除最后一行  
        lines = lines[:-1]  
      
    # 将修改后的内容写回文件  
    with open('filenames.txt', 'w', encoding='gbk') as file:  
        file.writelines(lines)
    
    # 创建一个空列表来存储过滤后的文件名  
    filtered_filenames = []  
      
    # 使用with语句打开文件,这样文件会在使用完毕后自动关闭  
    with open(file_path, 'r', encoding='gbk') as file:  
        # 逐行读取文件  
        for line in file:  
            # 去除行尾的换行符  
            filename = line.strip()  
            # 检查文件名是否以.mkv、.mp4或.ogg结尾  
            if filename and filename.endswith(('.mkv', '.mp4', '.ogg')):  
                # 如果是,则添加到过滤后的文件名列表中  
                filtered_filenames.append(filename)  
    
    for i in filtered_filenames:
        print(i)
    # 打印过滤后的文件名列表
    #print(filtered_filenames)

     

  • UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xd0 in position 292: invalid continuation byte

    UnicodeDecodeError 错误通常发生在尝试用错误的编码方式解码文件内容时。在你的例子中,错误信息提示 'utf-8' codec can't decode byte 0xd0 in position 292: invalid continuation byte,这意味着在读取文件时,Python 试图以 UTF-8 编码来解码文件,但在文件的第 293 个字节(因为计数通常从 0 开始,所以位置 292 是第 293 个字节)遇到了一个无法用 UTF-8 解码的字节(0xd0)。

    这通常意味着文件可能不是以 UTF-8 编码保存的,或者文件可能在某个地方损坏了。要解决这个问题,你可以尝试以下步骤:

    1.确定文件的正确编码
    如果你知道文件的确切编码,你可以在打开文件时指定正确的编码。例如,如果文件是 GBK 编码(在中文 Windows 系统中很常见),你应该这样打开文件:

    with open('filenames.txt', 'r', encoding='gbk') as file:  
        lines = file.readlines()

    如果你不确定文件的编码,可以尝试使用 chardet 这样的库来检测编码:

     

    import chardet  
    
    # 读取文件的一部分来检测编码  
    with open('filenames.txt', 'rb') as file:  
        rawdata = file.read(1000)  # 只读取文件的前1000个字节  
        result = chardet.detect(rawdata)  
        encoding = result['encoding']  
    
    # 使用检测到的编码来读取文件  
    with open('filenames.txt', 'r', encoding=encoding) as file:  
        lines = file.readlines()

    2.忽略或替换错误
    如果你不关心无法解码的字符,你可以在打开文件时忽略或替换这些错误:

    with open('filenames.txt', 'r', encoding='utf-8', errors='ignore') as file:  
        lines = file.readlines()

    或者:

    with open('filenames.txt', 'r', encoding='utf-8', errors='replace') as file:  
        lines = file.readlines()

    errors='ignore' 会忽略那些无法解码的字符,而 errors='replace' 会用一个占位符替换它们(通常是问号 ?)。

    3.保存文件为 UTF-8 编码
    如果可能,你可以尝试将文件另存为 UTF-8 编码,然后使用 UTF-8 来读取它。大多数文本编辑器和IDE都允许你改变文件的编码。

    记住,在尝试这些解决方案时,最好先备份你的原始文件,以防在尝试不同的编码或错误处理方式时造成数据丢失。

  • cmd获取当前目录文件名并且输出一个txt文档,把文件名写入到这个txt文件里,子文件夹里的文件也要遍历出来

    你可以使用Windows命令提示符(CMD)中的命令来完成这个任务。下面是一个简单的批处理脚本示例,它将遍历当前目录及其所有子目录,并将所有文件的名称写入一个名为filenames.txt的文本文件中。

    1. 打开记事本或任何文本编辑器。

    2. 将以下代码复制并粘贴到文本编辑器中:

    @echo off  
    setlocal enabledelayedexpansion  
      
    set "outputFile=filenames.txt"  
    if exist "%outputFile%" del "%outputFile%"  
      
    for /r %%F in (*) do (  
        echo %%~nxF >> "%outputFile%"  
    )  
      
    echo 文件名已写入 %outputFile%  
    pause
    1. 将文件保存为.bat扩展名,例如list_files.bat
    2. 将此批处理文件放在你想要遍历的目录中。
    3. 双击运行此批处理文件。

    这个脚本的工作原理如下:

    • @echo off 关闭命令回显,使输出更整洁。
    • setlocal enabledelayedexpansion 允许在for循环中使用变量扩展。
    • outputFile 变量设置为输出文件的名称(filenames.txt)。
    • 如果输出文件已存在,则删除它。
    • for /r %%F in (*) do 遍历当前目录及其所有子目录中的文件。
      • echo %%~nxF >> "%outputFile%" 将每个文件的名称(包括扩展名)追加到输出文件中。
    • 最后,显示一个消息并等待用户按键,以便查看结果。

    运行完此脚本后,你应该会在同一目录下看到一个名为filenames.txt的文件,其中包含了所有文件的名称。

  • tackter

    http://tracker.opentrackr.org:1337/announce
    
    udp://open.tracker.cl:1337/announce
    
    https://opentracker.i2p.rocks:443/announce
    
    udp://tracker.auctor.tv:6969/announce
    
    udp://opentracker.i2p.rocks:6969/announce
    
    udp://open.demonii.com:1337/announce
    
    udp://open.stealth.si:80/announce
    
    udp://tracker.torrent.eu.org:451/announce
    
    udp://exodus.desync.com:6969/announce
    
    udp://tracker.moeking.me:6969/announce
    
    udp://tracker1.bt.moack.co.kr:80/announce
    
    udp://tracker.theoks.net:6969/announce
    
    udp://tracker.bittor.pw:1337/announce
    
    udp://movies.zsw.ca:6969/announce
    
    udp://bt.ktrackers.com:6666/announce
    
    https://tracker.tamersunion.org:443/announce
    
    http://tracker.ipv6tracker.org:80/announce
    
    udp://tracker2.dler.org:80/announce
    
    udp://tracker.publictracker.xyz:6969/announce
    
    udp://tracker.dler.org:6969/announce