创建单IP的***网络

一、架构

1.1现有网络

  现有网络架构如图一所示,其中服务器网段为192.168.0.x使用专门线路接入internet,192.168.88.x为网络设备网段,其它都是办公网段使用另外的线路接入internet。

165409972.jpg

图一、现有网络结构图

1.2 ***架构

  在图一所示的网络架构中搭建一台***服务器(192.168.0.x网段),在专门的安全设备上映射该服务器的内网地址(外部***拨入输入外网地址)。远程用户成功拨入后,办公网络的用户可以正常访问已拨入的***客户端。如图二所示。

***服务器配置如下:

  1、单网卡:192.168.0.47

  2、***客户段:172.16.0.0

  3、Office办公网段:192.168.10.x-192.168.17.x

160552853.jpg

图二、***网络结构图

1.3 ***方案

  通过使用CentOS6.3(64bit) +Open***(***服务器)+OpenSSL(CA证书)+MySQL(验证)的方式组建***方案。

二、安装配置linux系统

2.1安装CentOS系统

  通过正常方式安装CentOS6.3的64位版本。可以不安装图形界面,字符界面的组件中建议选上基本的开发工具。可通过以下指令查看系统版本,如图三所示。

cat/etc/issue
cat /proc/version

160711880.jpg

图三、linux系统版本

2.2配置系统yum源

  完成安装后配置系统的yum源有助于后续软件的安装配置,结合国内实际情况采用163.com的更新源,速度和效率上都有保证。163的开源服务器地址为http://mirrors.163.com,各版本的linux在这里都有收集。

wgethttp://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS6-Base-163.repo/etc/yum.repos.d/
mv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.orig
mv/etc/yum.repos.d/CentOS6-Base-163.repo /etc/yum.reops.d/CentOS-Base.repo
wgethttp://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-7.noarch.rpm

160840908.jpg

图四、yum源设置

2.3配置系统时间

  系统的时区和时间设置不准确会导致SQL查询和流量控制脚本运行不正常,因些在安装系统后需正确设定系统的时区和时间。输入以下指令设置正确的系统时间。

hwclock --set--date="07/07/06 10:19"
hwclock --hctosys

  其中第一条语句是设定硬件时钟,第二条语句是设定系统时钟和硬件时钟同步。同时,时区的设定也很重要,如果系统及硬件时钟正确而时区设定不正确的话会导致时间相差几个小时,因些调整好时区也是一个重要的步骤。

tzselect

160931451.jpg

图五、时区设置

  查找系统文件etc/sysconfig/clock并修改为:

ZONE="Asia/Shanghai"
UTC=true
ARC=false

161015802.jpg

图六、时区设置

  找到系统文件/usr/share/zoneinfo/Asia/Shanghai用这个文件替换当前的/etc/localtime文件

cp/usr/share/zoneinfo/Asia/Shanghai /etc/localtime

161046489.jpg

图七、时区设置

2.4禁用selinux

  selinux 确实提高了系统的安全性,但另一方面也给应用程序增加了很多的不确定性。我在安装配置完zabbix后曾出现过始终无法打开浏览页面无法进入web安装界 面的情况,后来禁用selinux后问题解决。对于selinux的启用与否个人见仁见智可以根据自已的需求决定是否开启。

vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted

161943877.jpg

图八、selinux设置

三、安装相关组件

3.1安装系统依赖组件

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibcglibc-devel glib2 glib2-devel bzip2bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel opensslopenssl-devel

162256481.jpg

图九、相关依赖组件安装

3.2安装open***组件

yum install open*** pam_krb5 pam_mysql pam pam-devel

162336863.jpg

图十、open***组件安装

3.3安装MySQL组件

yum install mysql mysql-devel libgcrypt-devel lzo-mini lzo lzolzo-devel mysql-server  mysql-libs

162431762.jpg

图十一、MySQL组件安装

四、配置证书

  Open***可以使用PKI证书体系进行双向的认证操作,也就是在建立***连接的同时,除了服务器端要验证客户端的证书外,客户端也要确认服务器端的证书。

  当服务器端及客户端在相互认证时,会利用根证书(RootCA)公钥进行对方证书的验证,然后会再进行一些其它信息的测试,例如,验证对方证书上的common name或是其它类别。

这样的机制有以下好处:

  1、服务端只需要知道它自已的凭证及私钥,无需知道个别可能会连进来的客户端的证书及私钥。

  2、服务端只接受由同一个根证书(Root CA)所签发的客户端证书。服务端不需要根证书的私钥即可进行验证。所以根证书(RootCA)的私钥,可以安全保存到其它的机器上。

  3、如果客户端的私钥有问题的话,可以把它加入失效列表,这样可以在连接时,拒绝***连接。

4.1复制证书模板

162547446.jpg

图十二、证书配置

4.2生成根证书(Root CA)

  先修改证书生成变量文件,保存退出,然后开始清理。

vi/etc/open***/easy-rsa/2.0/vars
export KEY_COUNTRY="CN"#国家
export KEY_PROVINCE="GD"#省
export KEY_CITY="DongGuan" #城市
export KEY_ORG="myj"#组织
export KEY_EMAIL="waring_id@126.com"
export KEY_EMAIL=waring_id@126.com
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
/etc/open***/easy-rsa/2.0/clean-all#清理
/etc/open***/easy-rsa/2.0/build-ca#生成根证书

4.3生成服务端(server)客户端(client)证书及DH交换参数

  DH密钥交换参数(Diffie Hellman parameters)主要用于加密通道未建立前,在不安全的通道下建立一个密钥,可以用这个密钥在第一次证书交换时加密使用。这个密钥只使用一次,下次要用时会重新生成。

/etc/open***/easy-rsa/2.0/build-key-serverserver#生成服务器证书
/etc/open***/easy-rsa/2.0/build-keyclient1#生成客户端证书
/etc/open***/easy-rsa/2.0/build-dh#生成DH交换参数

  证书生成完毕后会在“/etc/open***/easy-rsa/2.0/keys/”下生成以下文件,如表一所示。

Filename   Needed By   Purpose   Secret
ca.crt   server + all clients   Root CA certificate   NO
ca.key   key signing machine only   Root CA key   YES
Dh1024.pem   server only   Diffie Hellman parameters   NO
server.crt   server only   Server Certificate   NO
server.key   server only   Server Key   YES
client1.crt   client1 only   Client1 Certificate   NO
client1.key   client1 only   Client1 Key   YES

Filename

Needed By

Purpose

Secret

ca.crt

server + all clients

Root CA certificate

NO

ca.key

key signing machine only

Root CA key

YES

Dh1024.pem

server only

Diffie Hellman parameters

NO

server.crt

server only

Server Certificate

NO

server.key

server only

Server Key

YES

client1.crt

client1 only

Client1 Certificate

NO

client1.key

client1 only

Client1 Key

YES

表一、证书列表

五、配置数据库

  数据库使用MySQL,主要用于存储***客户端拨入的用户名和密码,在***拨入时进行验证操作,MySQL的详细设定可以参考相关文档,这里仅列出必须的指令。

5.1配置启动数据库

service mysqld start#启动数据库
mysql_secure_installation#数据库密码重设

5.2新建数据库

mysql -uroot -p
CREATE DATABASE open***;
GRANT ALL ON open***.* TO'open***'@'localhost' IDENTIFIED BY 'password';

5.3创建用户数据表

CREATE TABLE IF NOT EXISTS`user` (
`username` char(32) COLLATEutf8_unicode_ci NOT NULL,
`password` char(128) COLLATEutf8_unicode_ci DEFAULT NULL,
`active` int(10) NOT NULLDEFAULT '1',
`creation` timestamp NOT NULLDEFAULT CURRENT_TIMESTAMP,
`name` varchar(32) COLLATEutf8_unicode_ci NOT NULL,
`email` char(128) COLLATEutf8_unicode_ci DEFAULT NULL,
`note` text COLLATEutf8_unicode_ci,
`quota_cycle` int(10) NOT NULLDEFAULT '30',
`quota_bytes` bigint(20) NOTNULL DEFAULT '10737418240',
`enabled` int(10) NOT NULLDEFAULT '1',
PRIMARY KEY (`username`),
KEY `idx_active` (`active`),
KEY `idx_enabled` (`enabled`)
) DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci;

5.4创建日志数据表

CREATE TABLE IF NOT EXISTS`log` (
`username` varchar(32) COLLATEutf8_unicode_ci NOT NULL,
`start_time` timestamp NOTNULL DEFAULT CURRENT_TIMESTAMP,
`end_time` timestamp NOT NULLDEFAULT '0000-00-00 00:00:00',
`trusted_ip` varchar(64)COLLATE utf8_unicode_ci DEFAULT NULL,
`trusted_port` int(10) DEFAULTNULL,
`protocol` varchar(16) COLLATEutf8_unicode_ci DEFAULT NULL,
`remote_ip` varchar(64)COLLATE utf8_unicode_ci DEFAULT NULL,
`remote_netmask` varchar(64)COLLATE utf8_unicode_ci DEFAULT NULL,
`bytes_received` bigint(20)DEFAULT '0',
`bytes_sent` bigint(20)DEFAULT '0',
`status` int(10) NOT NULLDEFAULT '1',
KEY `idx_username`(`username`),
KEY `idx_start_time`(`start_time`),
KEY `idx_end_time`(`end_time`)
) DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci;
exit;#退出数据库

六、配置pam支持MySQL验证

  用户的验证信息(用户名、密码)保存在MySQL数据库中,验证模块则是利用pam功能的新增pam_mysql.so插件来实现。需要注意的是32位和64位操作系统所引用的地址是有区别的。

6.1安装pam.so组件

cd /usr/src
wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
tar zxvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
vi patch.in
--- Makefile.in.chold2008-07-14 10:25:53.000000000 +0200
+++ Makefile.in 2008-07-1410:26:06.000000000 +0200
@@ -110,7 +110,7 @@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-pam_mysql_la_LIBADD =
+pam_mysql_la_LIBADD = -lpam
pam_mysql_la_OBJECTS=pam_mysql.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES)$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
patch -p0 < patch.in
./configure
make
make install
cp /usr/lib64/open***/plugin/lib/open***-auth-pam.so/etc/open***/

6.2修改open***让其支持MySQL验证

crypt 表示密码在数据库中加密存储的方式,含义如下:

Ø0 (or “plain”):不加密,明文存储。不推荐使用。

Ø1 (or “Y”):使用crypt(3)函数,相当于MySQL 中的ENCRYPT()函数。

Ø2 (or “mysql”):使用MySQL 的PASSWORD()函数。PAM可能与MySQL 的函数不同,不推荐使用。

Ø3 (or “md5″):使用MD5。

Ø4 (or “sha1″):使用SHA1。

vi /etc/pam.d/open***
auth sufficient /lib64/security/pam_mysql.so user=open***passwd=www.myj123.com host=localhostdb=open*** table=user usercolumn=usernamepasswdcolumn=password where=active=1 sqllog=1 crypt=1
account required /lib64/security/pam_mysql.so user=open***passwd=www.myj123.com host=localhostdb=open*** table=user usercolumn=usernamepasswdcolumn=password where=active=1 sqllog=1 crypt=1

6.3启动saslauthd

servicesaslauthd start

6.4添加测试用户


mysql -u open***–p
USE open***;
INSERTINTO user(username, password) VALUES('test', ENCRYPT('test'));
exit;

6.5测试MySQL验证

testsaslauthd -u test -p test-s open***

如果提“0: OK "Success."表示成功。

七、配置open***

7.1配置open***服务端

  开始建立Open***的配置文件,Open*** 服务启动时,会扫描/etc/open*** 目录中的.conf 文件,对于每个文件,启动一个daemon。本系统要实现UDP、TCP 登录的同时支持,可以写两份配置文件,如tcp.conf,udp.conf,即启动两个daemon,分别负责TCP和UDP协议。以下以udp为例。

vi /etc/open***/server.conf
port 1194#使用1194端口
proto udp#使用UDP协议
devtun#使用tunn方式
ca /etc/open***/easy-rsa/2.0/keys/ca.crt#根证书
cert /etc/open***/easy-rsa/2.0/keys/server.crt#服务端证书
key /etc/open***/easy-rsa/2.0/keys/server.key#服务端key
dh /etc/open***/easy-rsa/2.0/keys/dh1024.pem#DH交换密钥
server 172.16.0.0 255.255.255.0#***拨入后分配的地址
ifconfig-pool-persist ipp.txt#***拨入后IP信息
push "route 172.16.0.0 255.255.255.0"
push "route 192.168.0.0 255.255.255.0"
push "route 192.168.16.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 202.96.128.166"
push "dhcp-option DNS 202.96.128.86"
push "dhcp-option DNS 172.16.0.1"
keepalive 20 120#连接时间
plugin /etc/open***/open***-auth-pam.so open***#mysql验证方式
username-as-common-name#用户名验证
comp-lzo#压缩传输
max-clients 30
user nobody
group nobody
persist-key
persist-tun
status/var/log/open***/open***-status.log
log-append /var/log/open***/open***.log
verb 3
mute 5
script-security 2
client-connect ./connect.sh#连接时启用的脚本
client-disconnect ./disconnect.sh#断开连接时的脚本

7.2配置open***流量控制

  open***流量控制的主要作用是在用户连接时,在数据库log 表中新建一条记录,记录用户的IP 地址、端口号、连接时间等信息。在用户断开连接时,更新刚才添加的记录,记下用户的断开连接时间、发送数据量、接收数据量等。然后,对用户的流量进行判断,若超过配额,则将用户锁定(active=0)。

  user 表中的quota_cycle 是用户的流量计算周期,quota_bytes 是用户每个周期内最多允许的流量。connect.sh 和disconnect.sh 脚本文件中调用了Open*** 的环境变量。Open*** 在执行脚本时,自动各种设置了环境变量,供脚本使用。

vi /etc/open***/connect.sh#连接脚本
#!/bin/bash
DB='open***'
DBADMIN='open***'
DBPASSWD='password'
mysql -u$DBADMIN -p$DBPASSWD -e "INSERT INTOlog(username,start_time,trusted_ip,trusted_port,protocol,remote_ip,remote_netmask,status) VALUES('$common_name',now(),'$trusted_ip',$trusted_port,'$proto_1','$ifconfig_pool_remote_ip','$route_netmask_1',1)"$DB
vi /etc/open***/disconnect.sh#断开连接时脚本
#!/bin/bash
DB='open***'
DBADMIN='open***'
DBPASSWD='password'
mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE log SETend_time=now(),bytes_received=$bytes_received,bytes_sent=$bytes_sent,status=0WHERE trusted_ip='$trusted_ip' AND trusted_port=$trusted_port ANDremote_ip='$ifconfig_pool_remote_ip' AND username='$common_name' ANDstatus=1" $DB
mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=0 WHERE user.username IN (SELECT username FROM (SELECT log.username ASusername, quota_bytes FROM user, log WHERE log.username='$common_name' ANDlog.username=user.username AND log.status=0 ANDTO_DAYS(NOW())-TO_DAYS(start_time)< =quota_cycle GROUP BY log.usernameHAVING SUM(bytes_received)+SUM(bytes_sent)>=quota_bytes) AS u);" $DB
chmod +x /etc/open***/connect.sh
chmod +x/etc/open***/disconnect.sh

  使用cron 每天对用户进行检查以上操作在用户超过流量时自动将用户锁定。每天还应该执行一次检查,把已经恢复流量的用户解锁。可以通过cron实现此功能。

vi /etc/cron.daily/open***#每天定时执行脚本
#!/bin/bash
DB='open***'
DBADMIN='open***'
DBPASSWD='password'
mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=1" $DB
mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=0 WHERE user.username IN (SELECT username FROM (SELECT log.username ASusername, quota_bytes FROM user, log WHERE log.username=user.username ANDlog.status=0 AND TO_DAYS(NOW())-TO_DAYS(start_time)< =quota_cycle GROUP BYlog.username HAVING SUM(bytes_received)+SUM(bytes_sent)>=quota_bytes) ASu);" $DB
mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=0 WHERE enabled=0" $DB
chmod +x /etc/cron.daily/open***

7.3配置open***客户端(windows)

  需要先安装windows下的客户端,客户端分为32位版本和64位两种,下载后正常安装。安装完成后在“C:\Program Files\Open***\config\”下将client1.key、client1.crt和ca.crt放入该文件夹,同时建立以下客户端配置文件如myopen***.o***,详情如下所示。

client
devtun
protoudp
remote 远程IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
--ca ca.crt
--cert client1.crt
--key client1.key
auth-user-pass
ns-cert-type server
keepalive 20 60
comp-lzo
verb 3
mute 20
route-method exe
route-delay 2

  客户端启动open***后选择连接(connect)后输入用户验证的用户名和密码,拨入成功后如图十二、十三、十四所示。

164351351.jpg

图十二、open***客户端

164413295.jpg

图十三、open***客户端

164435281.jpg

图十四、open***客户端

7.4配置open***客户端(ubuntu)

sudo apt-get open***
sudocp/usr/share/doc/open***/examples/sample-config-files/client.conf /etc/open***/
sudocp /home/hd123/ca.crt ./
sudocp /home/hd123/client1.*./
sudo vi/etc/open***/client.conf
sudoopen*** --config/etc/open***/client.conf#启动客户端

八、启动并测试open***

8.1启动open***

  在服务器端启动open***服务。运行以下指令后open***服务器端会启动相应服务,服务启动后可查看配置文件中设定的日志定位存在的问题,启动成功后会在系统中生成一块tun0网卡,如图十五所示。

serviceopen*** start

164706126.jpg

图十五、MySQL组件安装

8.2启用系统路由转发

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
sysctl -p

8.3配置防火墙

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [11:874]
-A INPUT -m state --stateRELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p udp -m udp--dport 1194 -j ACCEPT
-A INPUT -itun+ -j ACCEPT
-A INPUT -p tcp -m state--state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m state--state NEW -m udp --dport 1194 -j ACCEPT
-A INPUT -j REJECT--reject-with icmp-host-prohibited
-A FORWARD -itun+ -o eth0 -jACCEPT
-A FORWARD -i eth0 -o tun+ -jACCEPT
-A FORWARD -j REJECT--reject-with icmp-host-prohibited
-A OUTPUT -o eth0 -p udp -mudp --sport 1194 -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT
-A FORWARD -j REJECT--reject-with icmp-host-prohibited
-A OUTPUT -o eth0 -p udp -mudp --sport 1194 -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT
-A OUTPUT -o eth0 -p icmp -jACCEPT
-A OUTPUT -o eth0 -p tcp -mtcp --sport 22 -j ACCEPT
COMMIT




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为Java应用程序加上退出事件处理(ShutdownHook)

ShutdownHook 是这样一个概念&#xff1a;向虚拟机注册一个线程&#xff0c;当程序退出(CtrlC)时虚拟机会启动这个线程,我们可以在这个线程的run()中做一些清除的工作,如:释放数据库连接,关闭文件等. 注册: Runtime.getRuntime().addShutdownHook(Thread t); 注销: Runtime.get…

烂泥:利用Diskgen找回分区破坏前的资料

本文首发于烂泥行天下&#xff0c;由秀依林枫提供友情赞助。呵呵&#xff0c;好久没有写过博客了。看看时间上一篇博客应该是在一个月之前发布的&#xff0c;最近事情比较多大部分时间都是在出差。自己对技术也没有什么研究的&#xff0c;就说说这次项目中碰到的一个有关数据恢…

40幅非常精美的字体艺术作品欣赏(上篇)

这篇文章和大家分享40幅非常精美的字体艺术作品。字体原来也可以设计得这么美&#xff0c;真是不可思议&#xff0c;一起欣赏吧。 Computer Arts Magazine by Steven Bonner Tangled Handmade Font by Katya Belkina Typo Graphic Design by Andrei D. Robu Peace by Piece Fon…

mysql设置不区分大小写

mysql设置不区分大小写 1.windows下 到安装mysql的目录&#xff0c;修改my.ini文件 在文件最后一行加上下面一句话 lower_case_table_names1 lower_case_table_names 1说明 0&#xff1a;区分大小写&#xff0c;1&#xff1a;不区分大小写 效果如下 [mysqld] port 3306 b…

k8s 组件介绍-API Server

API Server简介 k8s API Server提供了k8s各类资源对象&#xff08;pod,RC,Service等&#xff09;的增删改查及watch等HTTP Rest接口&#xff0c;是整个系统的数据总线和数据中心。 kubernetes API Server的功能&#xff1a; 提供了集群管理的REST API接口(包括认证授权、数据校…

分布式版本控制系统入门

简介 在过去几年&#xff0c;对于分布式版本控制可以给开发过程提供的益处有许多争论。最近&#xff0c;分布式工具已经很成熟了。尽管分布式工具的一些优点最初可能不明显&#xff0c;但是从长期来看&#xff0c;它们提供的灵活性是非常有意义的。阅读完本文之后&#xff0c;您…

Hadoop源生实用工具之distcp

1 概览 DistCp&#xff08;Distributed Copy&#xff09;是用于大规模集群内部或者集群之间的高性能拷贝工具。 它使用Map/Reduce实现文件分发&#xff0c;错误处理和恢复&#xff0c;以及报告生成。 它把文件和目录的列表作为map任务的输入&#xff0c;每个任务会完成源列表中…

如何使用spy ++ (How to use Spy ++)

一个网友在我的一篇随笔后问道&#xff0c;如何使用spy 查找要用到的窗体类名以及相关信息 现把相关作法整理如下 如果你装了vs.net&#xff0c;在vs.net的工具里面就可以看到spy 打开spy &#xff0c;会以树状图显示当前系统所有的窗体信息&#xff0c;如下所示 然后找到…

PL/SQL Developer 9 注册机

软件下载&#xff1a;下载 注册机下载&#xff1a;下载 说明&#xff1a;测试版本--9.0.1.1613&#xff08;无需替换文件&#xff0c;输入注册信息即可&#xff09; 附图&#xff1a; 转载于:https://www.cnblogs.com/zhanqi/archive/2011/10/12/2208750.html

程序图片运行效果存在偏差问题

2019独角兽企业重金招聘Python工程师标准>>> 当图片放到高分辨率的文件夹下&#xff0c;运行程序的手机却是低分辨率时就会出现该问题。解决办法很容易&#xff0c;就是把图片换个文件夹。比如图片放到drawable-xhdpi下&#xff0c;而模拟器是480*800&#xff0c;图…

如何将android例子程序添加到Eclipse进行调试运行

website&#xff1a;http://blog.csdn.net/whwzm88/article/details/6342583 1、打开Eclipse,选择File->new->Android Project,如附图所示窗口: 2、选择Create project from existing source单选框,然后点击->Browse..., 找到想要查看的android例子目录: 备注&…

坦克大战 Java版

由于博客开通不久&#xff0c;以前没有博客&#xff0c;顺便把以前做的项目也介绍下 希望大家支持&#xff0c;谢谢 坦克大战 IDE&#xff1a;MyEclipse 9.0 语言&#xff1a;Java SE 数据库&#xff1a;由于是单机版&#xff0c;不需要较高的安全性&#xff0c;且数据量较小&a…

c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展

在.Net中&#xff0c;System.Object.ToString()是用得最多的方法之一&#xff0c;ToString()方法在Object类中被定义为virtual&#xff0c;Object类给了它一个默认实现&#xff1a; 1 publicvirtualstringToString()2 {3 returnthis.GetType().ToString();4 }.Net中原生的class…

PHP使用CURL抓取页面

cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具&#xff0c;他能够从互联网上获得各种各样的网络资源。简单来说&#xff0c;curl就是抓取页面的升级版。 <?php//1.初始化&#xff0c;创建一个新cURL资源$ch curl_init(); //2.设置URL和相应的选…

Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问

最近在公司生产环境中部署Lync Server 2013并对公网发布后&#xff0c;发现公网未加域客户端在与内网用户共享PPT时&#xff0c;会报证书错误&#xff0c;如下图所示&#xff1a;但是内网是正确的&#xff0c;经过查询了一下Lync 客户端自身的日志信息后发现&#xff0c;公网客…

用WinInet开发Internet客户端应用指南

一&#xff1a;http://www.vckbase.com/document/viewdoc/?id545 二&#xff1a;http://www.vckbase.com/document/viewdoc/?id546 用WinInet开发Internet客户端应用指南&#xff08;一&#xff09; 编译/NorthTibet 一、概述一个Internet客户端程序的目的是通过Internet…

关于Android错误 View requires API level 14 (current...

2019独角兽企业重金招聘Python工程师标准>>> 问题描述&#xff1a;在界面配置文件main.xml中&#xff0c;可能用上某些控件&#xff08;例如GridLayout&#xff09;遇上下面所说的错误:View requires API level 14(current min is 8), 但将项目clear后&#xff0c;再…

javascript 基础 转

最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟. 其实我们容易忽视的javascript的细节还有更多, 本文仅是冰山一角. 希望大家都能通过本文有所斩获.一. Jav…

2019春第二次课程设计实验报告

2019春第二次课程设计实验报告 一、实验项目名称 用数组实现反弹球消砖块 二、实验项目功能描述 利用键盘按键控制小球方向让小球碰到挡板后反弹上去消除砖块。 三、项目模块结构介绍 四、实现界面展示 五、代码托管链接 https://gitee.com/huangxuannn/events 六、实验总结 上…

nodejs+redis

为什么80%的码农都做不了架构师&#xff1f;>>> redis可以用来管理session http://www.csser.com/board/4f77e6f996ca600f78000936 然后使用的时候redis-server这个服务进程得开着&#xff0c;不然会悲剧的 转载于:https://my.oschina.net/kiloct/blog/137629