在这里让我们一起学习,一起提高!
前言
SSH(Secure Shell)是用于安全远程登录和管理服务器的协议,但其广泛使用也使其成为攻击者暴力破解的目标。SSH爆破攻击是指攻击者通过不断尝试用户名和密码组合,试图破解服务器的登录凭证。这种攻击不仅会消耗服务器资源,还可能导致系统被入侵。因此,采取有效的措施防止SSH爆破攻击至关重要。
实现方式
在Linux系统中,/etc/hosts.allow和/etc/hosts.deny文件用于控制对服务的访问权限。这两个文件的规则基于TCP Wrapper机制,允许系统管理员定义哪些IP地址或主机可以访问特定服务(如SSH)。
SSH(Secure Shell)是用于安全远程登录和管理服务器的协议,但其广泛使用也使其成为攻击者暴力破解的目标。SSH爆破攻击是指攻击者通过不断尝试用户名和密码组合,试图破解服务器的登录凭证。这种攻击不仅会消耗服务器资源,还可能导致系统被入侵。因此,采取有效的措施防止SSH爆破攻击至关重要。
实现方式
在Linux系统中,/etc/hosts.allow和/etc/hosts.deny文件用于控制对服务的访问权限。这两个文件的规则基于TCP Wrapper机制,允许系统管理员定义哪些IP地址或主机可以访问特定服务(如SSH)。
在Ubuntu 20.04上安装NVIDIA CUDA Toolkit的步骤如下:
确保你的系统已经安装了NVIDIA的官方驱动。
打开终端,并且添加NVIDIA的CUDA存储库的公钥:
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
添加CUDA存储库到你的系统:
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /" | sudo tee /etc/apt/sources.list.d/cuda.list
更新软件包列表:
sudo apt update
安装CUDA Toolkit(你可以根据需要安装特定版本的CUDA Toolkit,例如cuda-11-2):
sudo apt install cuda-toolkit-11-2
配置环境变量。将以下内容添加到你的.bashrc或.profile文件中:
export PATH=/usr/local/cuda-11.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
重新加载环境变量:
source ~/.bashrc
或者使用.profile文件的话使用source ~/.profile。
验证安装:
nvcc --version
以上步骤会安装CUDA Toolkit以及NVIDIA驱动,如果你已经安装了驱动,则不需要再次安装。请确保在执行这些步骤之前你已经备份了重要数据,并且你有足够的权限来修改系统设置。
确保你的系统已经安装了NVIDIA的官方驱动。
打开终端,并且添加NVIDIA的CUDA存储库的公钥:
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
添加CUDA存储库到你的系统:
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /" | sudo tee /etc/apt/sources.list.d/cuda.list
更新软件包列表:
sudo apt update
安装CUDA Toolkit(你可以根据需要安装特定版本的CUDA Toolkit,例如cuda-11-2):
sudo apt install cuda-toolkit-11-2
配置环境变量。将以下内容添加到你的.bashrc或.profile文件中:
export PATH=/usr/local/cuda-11.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
重新加载环境变量:
source ~/.bashrc
或者使用.profile文件的话使用source ~/.profile。
验证安装:
nvcc --version
以上步骤会安装CUDA Toolkit以及NVIDIA驱动,如果你已经安装了驱动,则不需要再次安装。请确保在执行这些步骤之前你已经备份了重要数据,并且你有足够的权限来修改系统设置。
最近在使用 apt-install 命令安装一些包时发现巨卡顿,一个原因肯定是自己家的网速有点慢了,当然最重要的原因还是 apt 源是国外的。网上看到了许多博主的换源过程,但发现他们的操作稍微有点复杂,而且需要修改 source 源文件,为了防止手残导致源文件出错,我直接使用 echo (输出命令)在终端修改源文件,添加源。
依次输入下面几行命令就可以成功将 apt 的源更换为国内的了,
sudo su
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
apt-get update
apt-get upgrade
依次输入下面几行命令就可以成功将 apt 的源更换为国内的了,
sudo su
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
apt-get update
apt-get upgrade
创建配置目录和文件
docker pull是由守护进程dockerd执行,因此代理需添加在dockerd的systemd配置中。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
编辑proxy.conf文件
[Service]
Environment="HTTP_PROXY=socks5://192.168.2.103:10808"
Environment="HTTPS_PROXY=socks5://192.168.2.103:10808"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
socks5://192.168.2.103:10808替换为你的本地代理
重载systemd并重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
参考
https://zhuanlan.zhihu.com/p/678307663
https://blog.csdn.net/qf0129/article/details/135729862
docker pull是由守护进程dockerd执行,因此代理需添加在dockerd的systemd配置中。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
编辑proxy.conf文件
[Service]
Environment="HTTP_PROXY=socks5://192.168.2.103:10808"
Environment="HTTPS_PROXY=socks5://192.168.2.103:10808"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
socks5://192.168.2.103:10808替换为你的本地代理
重载systemd并重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
参考
https://zhuanlan.zhihu.com/p/678307663
https://blog.csdn.net/qf0129/article/details/135729862
下载源码
wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.xz
解压源码
tar xvf node-v8.11.4-linux-x64.tar.xz
创建node目录
cd /usr/local/
mkdir node
复制程序
cd node-v8.11.4-linux-x64/
mv * /usr/local/node/
建立连接
ln -s /usr/local/node/bin/node /usr/local/bin/node
ln -s /usr/local/node/bin/npm /usr/local/bin/npm
测试一下
node -v
npm -v
wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.xz
解压源码
tar xvf node-v8.11.4-linux-x64.tar.xz
创建node目录
cd /usr/local/
mkdir node
复制程序
cd node-v8.11.4-linux-x64/
mv * /usr/local/node/
建立连接
ln -s /usr/local/node/bin/node /usr/local/bin/node
ln -s /usr/local/node/bin/npm /usr/local/bin/npm
测试一下
node -v
npm -v
示例一:
namespace service.threads;
//服务主线程
main = function(serviceName){
import service;
import thread.event;
import fsys.log;
import console;
import sys.volume;
import process;
import fsys.dirWatcher;
import fsys.dlg.dir;
service.msgbox("服务已启动");
console.open();
//取所有分区信息
var drives = sys.volume.getLogicalDrives()
for(i,drv in drives){
var info = sys.volume.getInfo( drv );
if(info){
var watchDir = info.drive;
watcher = fsys.dirWatcher( watchDir )
for( filename,action in watcher.eachChanges() ){
fsys.log.print( watchDir + "\" + filename," -> ",action,'\r\n')
console.log( watchDir + "\" + filename," -> ",action,'\r\n')
}
}
}
}
//注意这也是一个独立的线程,用户控制服务停止或启动时都会触发此函数
control = function(control,eventType,pEventData){
import service;
import thread.event;
var evtTask = thread.event("NT.SERVICE.CONTROL." + owner.serviceName,false);
if( control == 0x1/*_SERVICE_CONTROL_STOP*/ ){
//控制线程中更新srvStatus,第一个参数只要指定需要更新的字段就行了
service.updateStatus({currentState = 0x3/*_SERVICE_STOP_PENDING*/},owner.serviceName);
evtTask.set();//使事件对象切换为有信号状态,使wait函数退出
}
return 0x0/*_NOERROR*/
}
示例二:
namespace service.threads;
//服务主线程
main = function(serviceName){
import service;
import thread.event;
import fsys.log;
import console;
import win.ui;
import fsys.dirWatcher;
import fsys.dlg.dir;
//用win.form创建一个线程外包对象
var winform = win.form();
winform.messageOnly();//告诉他不需要显示窗口,只保留能处理消息的功能
var watchDir = "C:";
//创建监视线程
winform.thrdWatcher = fsys.dirWatcher.thread(
function(filename,action,actionText){
fsys.log.print( watchDir + "\" + filename," -> ",action,'\r\n')
console.log( watchDir + "\" + filename," -> ",action,'\r\n')
}, watchDir);
win.loopMessage();
}
//注意这也是一个独立的线程,用户控制服务停止或启动时都会触发此函数
control = function(control,eventType,pEventData){
import service;
import thread.event;
var evtTask = thread.event("NT.SERVICE.CONTROL." + owner.serviceName,false);
if( control == 0x1/*_SERVICE_CONTROL_STOP*/ ){
//控制线程中更新srvStatus,第一个参数只要指定需要更新的字段就行了
service.updateStatus({currentState = 0x3/*_SERVICE_STOP_PENDING*/},owner.serviceName);
evtTask.set();//使事件对象切换为有信号状态,使wait函数退出
}
return 0x0/*_NOERROR*/
}
namespace service.threads;
//服务主线程
main = function(serviceName){
import service;
import thread.event;
import fsys.log;
import console;
import sys.volume;
import process;
import fsys.dirWatcher;
import fsys.dlg.dir;
service.msgbox("服务已启动");
console.open();
//取所有分区信息
var drives = sys.volume.getLogicalDrives()
for(i,drv in drives){
var info = sys.volume.getInfo( drv );
if(info){
var watchDir = info.drive;
watcher = fsys.dirWatcher( watchDir )
for( filename,action in watcher.eachChanges() ){
fsys.log.print( watchDir + "\" + filename," -> ",action,'\r\n')
console.log( watchDir + "\" + filename," -> ",action,'\r\n')
}
}
}
}
//注意这也是一个独立的线程,用户控制服务停止或启动时都会触发此函数
control = function(control,eventType,pEventData){
import service;
import thread.event;
var evtTask = thread.event("NT.SERVICE.CONTROL." + owner.serviceName,false);
if( control == 0x1/*_SERVICE_CONTROL_STOP*/ ){
//控制线程中更新srvStatus,第一个参数只要指定需要更新的字段就行了
service.updateStatus({currentState = 0x3/*_SERVICE_STOP_PENDING*/},owner.serviceName);
evtTask.set();//使事件对象切换为有信号状态,使wait函数退出
}
return 0x0/*_NOERROR*/
}
示例二:
namespace service.threads;
//服务主线程
main = function(serviceName){
import service;
import thread.event;
import fsys.log;
import console;
import win.ui;
import fsys.dirWatcher;
import fsys.dlg.dir;
//用win.form创建一个线程外包对象
var winform = win.form();
winform.messageOnly();//告诉他不需要显示窗口,只保留能处理消息的功能
var watchDir = "C:";
//创建监视线程
winform.thrdWatcher = fsys.dirWatcher.thread(
function(filename,action,actionText){
fsys.log.print( watchDir + "\" + filename," -> ",action,'\r\n')
console.log( watchDir + "\" + filename," -> ",action,'\r\n')
}, watchDir);
win.loopMessage();
}
//注意这也是一个独立的线程,用户控制服务停止或启动时都会触发此函数
control = function(control,eventType,pEventData){
import service;
import thread.event;
var evtTask = thread.event("NT.SERVICE.CONTROL." + owner.serviceName,false);
if( control == 0x1/*_SERVICE_CONTROL_STOP*/ ){
//控制线程中更新srvStatus,第一个参数只要指定需要更新的字段就行了
service.updateStatus({currentState = 0x3/*_SERVICE_STOP_PENDING*/},owner.serviceName);
evtTask.set();//使事件对象切换为有信号状态,使wait函数退出
}
return 0x0/*_NOERROR*/
}
Python中有许多优秀的Web框架,例如Flask、Django等。这些框架可以帮助我们快速搭建Web应用程序,并实现接口功能。
from flask import Flask
from flask import request
from flask import jsonify
app = Flask(__name__)
# 处理GET请求
@app.route('/api', methods=['GET'])
def api_get():
# 获取请求参数
param = request.args.get('param')
# 处理请求参数
result = {'param': param}
# 返回响应数据
return jsonify(result)
# 处理POST请求
@app.route('/api', methods=['POST'])
def api_post():
# 获取请求数据
data = request.json
# 处理请求数据
result = {'data': data}
# 返回响应数据
return jsonify(result)
if __name__ == '__main__':
app.run()
上面的代码演示了如何使用Flask框架搭建一个简单的接口。其中,@app.route装饰器用于指定接口的URL路径和HTTP请求方法。使用request对象可以获取请求参数和请求数据,使用jsonify函数可以将Python对象转换为JSON格式的响应数据。
from flask import Flask
from flask import request
from flask import jsonify
app = Flask(__name__)
# 处理GET请求
@app.route('/api', methods=['GET'])
def api_get():
# 获取请求参数
param = request.args.get('param')
# 处理请求参数
result = {'param': param}
# 返回响应数据
return jsonify(result)
# 处理POST请求
@app.route('/api', methods=['POST'])
def api_post():
# 获取请求数据
data = request.json
# 处理请求数据
result = {'data': data}
# 返回响应数据
return jsonify(result)
if __name__ == '__main__':
app.run()
上面的代码演示了如何使用Flask框架搭建一个简单的接口。其中,@app.route装饰器用于指定接口的URL路径和HTTP请求方法。使用request对象可以获取请求参数和请求数据,使用jsonify函数可以将Python对象转换为JSON格式的响应数据。
下载文件 (已下载 297 次)
pip install selenium
pip install pymysql
taskschd.msc
https://www.python.org/ftp/python/3.10.7/python-3.10.7-amd64.exe
https://googlechromelabs.github.io/chrome-for-testing/
下载文件 (已下载 290 次)
=====逆向=========
pip install pyExecJs
pip install curl_cffi
pip install lxml
pip install loguru
https://googlechromelabs.github.io/chrome-for-testing/