标签: 服务器

怎么把公钥添加到服务器?ssh更方便登录服务器。

每次ssh连接服务器都要 ssh root@10.66.66.66 然后输入密码。很麻烦!把公钥放到服务器上再起个别名,直接ssh test 就好啦。。
1、生成 SSH 公钥
大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。 首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:

$ cd ~/.ssh
$ ls
authorized_keys2 id_rsa known_hosts
config id_rsa.pub
关键是看有没有用 *** 和 ***.pub 来命名的一对文件,这个 *** 通常就是 id_dsa 或 id_rsa。有 .pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,或者干脆连 .ssh 目录都没有,可以用 ssh-keygen 来创建。

2、将id_rsa.pub公钥放到服务器上的authorized_keys(/root/.ssh/authorized_keys).
(可以手动复制过去,也可以ssh-copy-id root@10.10.10.10)

3、现在已经可以ssh 10.66.66.66 连接到该服务器。为了操作方便,可以在/.ssh/config中添加配置:
Host fw01

Hostname 10.55.55.55

User root

Host test

HostName 10.66.66.66

User cy

ProxyCommand ssh -q -W %h:%p fw01  # 通过fw01连接10.66.66.66(一般不需要)

 

然后就可以用ssh test 连接服务器

服务器定义、服务器特点、服务器分类、服务器软件

服务器定义
广义:专门给其他机器提供服务的计算机系统
狭义:一台高性能的计算机,通过网络提供外部计算机一些业务服务

(个人PC内存大概8G 16G 服务器内存128G起步)

服务器特点

可用性
可靠性、持续性。服务器一般需要7*24H不间断工作(如Web网站)
可利用性
服务器要为多用户提供服务,因此需要较高的连接和运算性能(性能要高)
可扩展性
服务器需要具备可扩展空间和冗余件(可以增加内存、硬盘等)
可管理性
保证在设备不停机的情况下修复服务器故障(一般服务器有两个电源,坏了一个还有一个)
服务器还需要具备如双机备份、系统备份、在线诊断、故障预警等功能。
服务器分类

按应用层次划分:
入门级服务器:小型企业、小部门需求。主要用于完成文件、打印服务等
工作组服务器:中型部门等、不复杂的业务,比如没有大型数据库需要管理。
部门级服务器:能够承载中大型数据库、网站等,具有较高的可用性、可靠性、可扩展性、可管理性。
企业级服务器:企业级服务器主要应用于需要处理大量数据,对处理速度和可靠性要求*高的大型企业和重要行业(如金融、交通、通信等行业)。
按体系架构划分:
非X86服务器:包括大型机、小型机和Unix服务器。使用RISC或EPIC处理器
X86服务器:即CISC架构服务器,也就是我们常说的PC服务器。
复杂指令集和简单指令集:

X86架构:

是微处理器执行的计算机语言指令集(复杂指令集),指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。

RISC指令集是以后高性能CPU的发展方向。它与传统的CISC(复杂指令集)相对。相比而言,RISC的指令格式统一,种类比较少,寻址方式也比复杂指令集少。使用RISC指令集的体系结构主要有ARM、MIPS。

按用途划分
通用服务器:没有为某种服务专门设计的,可以提供各种服务功能的服务器。
功能服务器(专用服务器):专门为某一种或某几种功能专门设计的服务器,可以实现“即插即用”,无需专业人员进行专门的软硬件配置。
按外形划分
可以分为:

机架式服务器
塔式服务器
刀片式服务器
机柜式服务器
钉钉(连续两天一天扩容一万台)、Welink
机架式服务器

特点:

现阶段销售数量*多的服务器
机箱尺寸比较小
在机柜中可以同时放置多台
单位:U

机架式服务器高度的计量方式

1U=1.75inch=44.45mm

华为常见的机架服务器有:RH1288H、RH2288H、RH5288、RH2488/2488H、RH5885H等

特点:

早期的服务器形式
较大的机箱尺寸
内部扩展能力较强
占用面积大
现在基本已经淘汰
刀片式服务器
刀片服务器是指在标准高度的机架式机箱内可插装多个卡式的服务器单元,是一种实现HAHD(High Availability High Density,高可用高密度)的低成本服务器平台,为特殊应用行业和高密度计算环境专门设计。刀片服务器就像“刀片”一样,每一块“刀片”实际上就是一块系统主板。

优点:

超高密度服务器
节省能源
集中化管理
快速部署
缺点:

前期成本高(前期部署成本高、需要特殊的供电需求等)
无论刀片服务器内置的冗余是多少,都存在所有刀片服务器宕机和故障的可能性。
对于拥有一个或两个刀片中心的企业用户来说,购买备用的部件可能很不划算(如备用机箱等)。
机柜式服务器
在一些高端企业服务器中由于内部结构复杂,设备较多,有的还具有许多不同的设备单元或者几个服务器都放在一个机柜中,这样的服务器就是机柜式服务器。

机柜式服务器一般为大型企业使用,如云服务提供商(华为云、阿里云等)。一般一次部署就是很多台。如:疫情期间,大家都线上办公和网课,钉钉曾连续两天连续扩容一万台服务器。

服务器软件
服务器软件工作在客户端-服务器(C/S)或浏览器-服务器(B/S)的方式,有很多形式的服务器,常用的包括:

文件服务器(File Server)
数据库服务器(Database Server)
邮件服务器(Mail Server)
网页服务器(Web Server)
FTP服务器(FTP Server)
域名服务器(DNS Server)
时间同步服务器(NTP Server)
代理服务器(Proxy Server)

C/S:

服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。

B/S:

B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端*主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。

文件服务器

%title插图%num

文件服务器是一台具有特殊功能的计算机,其主要目的是向客户机提供文件共享服务。文件服务器可以是一台能够运行其他应用的通用服务器,也可以是一台专门提供文件服务的功能服务器。

数据库服务器
运行在局域网中的一台或多台计算机和数据库管理系统软件共同构成了数据库服务器,为客户应用提供服务,这些服务是查询、更新、事务管理、索引、高速缓存、查询优化、安全及多用户存取控制等。

%title插图%num

数据库服务器建立在数据库系统基础上,具有数据库系统的特性,且有其独特的—面。主要功能如下:

数据库管理功能,包括系统配置与管理、数据存取与更新管理、数据完整性管理和数据安全性管理。
数据库的查询和操纵功能 ,该功能包括数据库检索和修改。
数据库维护功能,包括数据导入/导出管理,数据库结构维护、数据恢复功能和性能监测。
数据库并行运行,由于在同一时间,访问数据库的用户不止一个,所以数据库服务器必须支持并行运行机制,处理多个事件的同时发生。
注意:数据作为企业中非常重要的财产,所以一般在数据库服务器旁都会部署防火墙。

C语言实现一个简单的服务器

服务端
socket函数
为了执行网络I/O,一个进程必须做的*件事情就是创建一个socket函数

/* family 表示协议族 AF_INET(IPv4协议)、AF_INET6(IPv6协议)、AF_LOCAL(Unix域协议)、AF_ROUTE(路由套接字)、AF_KEY( 密钥套接字)
type 表示套接字类型 SOCK_STREAM(字节流套接字)、SOCK_DGRAM(数据报套接字)、SOCK_SEQPACKET(有序分组套接字)、SOCK_ROW(原始套接字)
protocol 表示传输协议 IPPROTO_TCP(TCP传输协议)、IPPROTO_UDP(UDP传输协议)、IPPROTO_SCTP(SCTP传输协议)
若成功返回非负描述符,若出错返回-1 */
int socket(int family, int type, int protocol);

bind函数
bind函数把一个本地协议地址赋予一个套接字,对于网际协议,协议地址就是IP加端口的组合

/* sockfd 初始化的套接字
myaddr 协议地址
addrlen 协议地址长度
若成功返回0 出错返回-1 */
int bind(int sockfd, const struct sockaddr * myaddr, socklen_t addrlen)

这个函数的第二个参数是协议地址,注意,这个协议地址已经有定义好的结构体,使用IPv4套接字结构地址时候,地址结构体定义如下

struct sockaddr_in {
uint8_t sin_len; //结构体长度
sa_family_t sin_family; //AF_INET
in_port_t sin_port; //端口(16-bie)
struct in_addr sin_addr; //IPv4地址(32-bit)
char sin_zero[8]; //没啥用,设置0即可
}

listen函数
listen函数仅有服务器调用,它完成两件事情:
1. 当使用socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将发送connect发起连接的客户端套接字。当调用listen函数之后,它被转成一个被动套接字,只是内核应该接受连接请求。所以,调用listen之后套接字由CLOSED状态转到LISTEN状态
2. 这个函数规定内核应该为相应套接字排队的*大连接数

//失败时返回-1
int listen(int sockfd, int backlog)

backlog参数的设定其实是表示两个队列的总和,这两个队列分别是
1. 未完成连接队列,在客户端发送一个SYN直到三次握手完成,都是这个状态,SYN_RCVD状态。

2. 已完成连接队列,这个表示三次握手完成的状态,ESTABLISHED状态
accept函数
accept函数是由TCP服务器调用,用于从已完成连接队列的队头返回下一个已完成连接,如果已完成连接队列为空,那么进程进入睡眠模式

// sockdf 服务器套接字莫描述符
// cliaddr 已连接的客户端协议地址
// addrlen 已连接的客户端协议地址长度
// 成功返回非负描述符,出错返回-1
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);

当accept成功时,返回值是由内核自动生成的全新描述符,代表与所返回的客户端TCP连接。所以,在我们讨论accept函数时,我们称*个参数为监听套接字,它的返回值是已连接套接字,一个服务器通常指创建一个监听套接字(通常是80端口),内核为每个由服务器进程接受的客户端连接创建一个已连接套接字,当服务器完成对某个给定的客户端服务时,连接就会被关闭。
函数的第二个参数也是一个协议地址结构体,这个结构体和服务端协议地址是同一个结构体。我们可以不关心客户端的协议,直接传空,我们关系的是这个函数的返回值,因为它返回的是客户端连接描述符,我们可以对这个描述符进行写操作,从而实现给客户端传输数据。

write函数
// sockfd socket文件描述符
// buf 文件内容
// count 内容长度
ssize_t write(int sockfd, const void * buff, size_t count);

完整的服务器代码
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main()
{
int listenfd = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);

if(listenfd < 0){
printf(“socket error”);
return -1;
}

struct sockaddr_in svraddr;/*声明一个变量,类型为协议地址类型*/
svraddr.sin_family = AF_INET;/*使用IPv4协议*/
svraddr.sin_port = htons(8887);/*监听8887端口*/
svraddr.sin_addr.s_addr = htonl(INADDR_ANY);/*绑定本机IP,使用宏定义绑定*/

if(bind(listenfd ,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr)) < 0){
printf(“bind error”);
return -1;
}

if(listen(listenfd, 20) < 0){
printf(“listen error”);
return -1;
}

struct sockaddr_in cliaddr;/*只是声明,并没有赋值*/
memset(&cliaddr, 0, sizeof(cliaddr));
socklen_t ret = sizeof(cliaddr);
int sockfd= accept(listenfd, (struct sockaddr*)&cliaddr, &ret );

if(sockfd < 0){
printf(“appect error”);
return -1;
}

char str[] = “Hello World”;
write(sockfd , str, sizeof(str));

close(sockfd );
close(listenfd);
}

客户端
socket函数
客户端要和服务端进行网络通讯,首先也必须调用socket函数,这里的socket函数和服务端的一样。

connect函数
TCP客户端就是使用connect函数和服务端建立连接

// sockfd 客户端TCP描述符
// sockaddr 服务端协议地址
// addrlen 服务端协议地址长度
int connect(int sockfd, const struct sockaddr * servaddr, socklen_t addrlen);

这个函数将触发客户端和服务端三次握手,函数的*个参数sockfd表示客户端返回的描述符,这里不需要调用bind函数绑定端口,系统会自动分配。函数的第二个参数需要配置服务端IP和端口信息,同样有结构体规范这些信息,结构体也是和服务端一样使用sockaddr_in类型。

read函数
客户端连接上服务器之后返回的是一个Socket文件描述符,既然是文件描述符,就可以通过简单的read函数获取网络数据。

// sockdf 文件描述符
// buf 文件内容存放地址
// count 内容长度
ssize_t read(int sockfd,void *buf,size_t count)

完整的客户端代码
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main()
{
int sockfd= socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);

if(sockfd== -1){
printf(“socket error”);
return -1;
}

struct sockaddr_in svraddr;
svraddr.sin_family = AF_INET;/*使用IPv4协议*/
svraddr.sin_port = htons(8887);/*需要连接的远程服务器端口*/
svraddr.sin_addr.s_addr = inet_addr(“127.0.0.1”);/*需要连接的远程服务器IP*/

if(connect(sockfd, (struct sockaddr *)&svraddr, sizeof(servaddr)) < 0){
printf(“connect error”);
return -1;
}

char str[64];
read(sockfd, str, 64);
printf(str);

close(sockfd);
}

迭代服务器
#include <stdio.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main()
{
int listenfd = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);

if(listenfd < 0){
printf(“socket error”);
return -1;
}

struct sockaddr_in svraddr;/*声明一个变量,类型为协议地址类型*/
svraddr.sin_family = AF_INET;/*使用IPv4协议*/
svraddr.sin_port = htons(8887);/*监听8887端口*/
svraddr.sin_addr.s_addr = htonl(INADDR_ANY);/*绑定本机IP,使用宏定义绑定*/

if(bind(listenfd,(struct sockaddr *)&svraddr,sizeof(svraddr)) < 0){
printf(“bind error”);
return -1;
}

if(listen(listenfd, 20) == -1){
printf(“listen error”);
return -1;
}

for ( ; ; ){
struct sockaddr_in cliaddr;/*只是声明,并没有赋值*/
socklen_t cliaddr_size = sizeof(cliaddr);
int sockfd = accept(listenfd, (struct sockaddr*)&cliaddr, &cliaddr_size );

if(sockfd < 0){
printf(“appect error”);
return -1;
}

char str[] = “Hello World”;
sleep(3);//3秒之后再向客户端发送数据
write(sockfd, str, sizeof(str));

close(sockfd);
/*close(listenfd);*/
}
}

并发服务器
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/socket.h>

void doit(int sockfd);

int main()
{
int listenfd= socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
pid_t pid;

if(listenfd < 0){
printf(“socket error”);
return -1;
}

struct sockaddr_in svraddr;/*声明一个变量,类型为协议地址类型*/
svraddr.sin_family = AF_INET;/*使用IPv4协议*/
svraddr.sin_port = htons(8887);/*监听8887端口*/
svraddr.sin_addr.s_addr = htonl(INADDR_ANY);/*绑定本机IP,使用宏定义绑定*/

if(bind(listenfd,(struct sockaddr *)&svraddr,sizeof(svraddr)) < 0){
printf(“bind error”);
return -1;
}

if(listen(listenfd, 20) < 0){
printf(“listen error”);
return -1;
}

for( ; ; ){
struct sockaddr_in cliaddr;/*只是声明,并没有赋值*/
socklen_t cliaddr_size = sizeof(cliaddr);
int sockfd= accept(listenfd, (struct sockaddr*)&cliaddr, &cliaddr_size );

if(sockfd < 0){
printf(“appect error”);
return -1;
}

if( (pid = fork()) == 0 ){
close(listenfd);/*子进程不需要监听,关闭*/
doit(sockfd);/*针对已连接的客户端套接字进行读写*/
close(sockfd);/*处理完毕,关闭客户端连接*/
exit(0);/*自觉退出*/
}

close(sockfd);
/*close(listenfd);*/
}
}

void doit(int sockfd){
char str[] = “Hello World”;
sleep(3);//3秒之后再向客户端发送数据
write(sockfd, str, sizeof(str));
}

服务器运维基础指南

#服务器运维基础指南

作为一个开发人员,对于服务器的操作不可避免。*常用的操作就是部署应用到服务器,及在生产,测试环境通过查看日志排查问题。

一般服务器都是linux操作系统并且是无图形界面的,所以进行任何操作都是通过命令行,由于从新一代程序员接触电脑都是从图形界面开始,所以在开始使用命令行的时候都不是很习惯,如果使用命令行习惯了,发挥现命令行可以干很多有趣,高效率的事情,提高生产力,让程序员更加专注在高技术含量的工作中。

##链接服务器入口
mac使用自带的终端,就可以直接登录服务器。windows需要下载工具例如:xshell

##登录服务器ssh
登录服务器有两种方式:

通过密码登录
免密码登录
ssh -l user ip/域名

ssh: secure shell 安全外壳协议,专为远程登录会话和其他网络服务提供安全性的协议。利用ssh协议可以有效防止远程管理过程中的信息泄漏问题。

###通过密码登录

输入: ssh -l user ip/域名

user:登录用户名

ip/域名: 服务器所属的公网id地址,或者应用的域名,如果要查看域名解析后的ip,在命令行输入 ping 域名,可以查看应用所属的公网ip(前提服务器没有做均衡负载,代理…)。

终端会提示你输入密码,此时输入密码,密码正确就可以登录服务器。

###免密码登录
免密码登录方式*次还是需要输入密码登录,不同的是,在登录之后把自己的密钥加入到服务器,下次就可以免密码登录。

生成ssh key
登录进服务器进入 ~ 目录下的 .ssh 打开 authorized_keys 文件如果没有则创建,把自己的公钥加入到authorized_keys里。之后再次使用ssh进入服务器的时候,不用输入密码就可以直接登录。

小技巧:mac可以新建一个.sh文件把ssh -l user ip/域名加入.sh文件,放在桌面默认使用终端打开,以后就可以双击.sh文件直接进入服务器(甚至可以在.sh写其他命令实现自动化)。

##退出服务器exit
exit

##查看当前目录位置 pwd
pwd

##显示当前目录下的所有文件ls

ls :列出当前目录下的所有文件

ls -l :列出当前目录下的所有文件及文件的详情

##进入退出目录cd

cd … :返回到上级目录
cd /. :返回根目录
cd 目录名 : 进入具体目录

##新建目录mkdir
mkdir file/filename

##启动运行脚本./

./xx.sh

##查看文件内容cat/tail

cat xxx.xx :查看文件的所有内容

tail -n 行数 xxx.xxx : 查看文件末尾xx行数

vi/vim xxx.xxx : 查看并且可以修改文件内容

##移动文件到具体目录 mv

mv xx sss : 移动xx文件到sss目录

建议删除文件时,先把文件移动到 /tmp目录下(linux的临时目录关机会清空,建议在此目录下进行删除)。

##删除文件 rm

rm -f xxx :强制删除文件

rm -rf xxx : -r 表示向下递归删除 -f 删除不提示 注意: rm -rf (不跟参数)会删除整个系统 , 就算有参数 linux没有回收站的概念 慎用慎用

rm -f *. * :梅花大法慎用,可能会误删除删除整个服务器

##修改文件的用户权限chown/chmod
chown -R user:user file :修改文件的用户权限 文件支持通配符

chmod 777 xxxx :改变文件权限 777就是高权限(读、写、执行 )登录用户他所在的组和其他人都有*高权限。(比较危险的操作)

###查看java程序的相关进程jps

jps :查看java程序进程

###拷贝文件到具体目录cp/scp

cp -r copyed copy : 把copyed复制到copy目录

scp xxx root@ip:/目录 : 复制xxx到远程ip服务器目录下

###启动服务关闭终端继续运行nohup

有时我们需要在服务器运行一些jar打包的应用,关闭终端后应用就关闭我们可以在 启动jar应用的命令前增加 nohup

###解压/压缩文件 unzip/zip

unzip -o xxx.xx -d sss :解压文件xxx.xx到sss并且全部覆盖

zip -r xxx.zip ./* : 压缩文件当前目录下的所有文件

如果没有unzip zip 命令执行,可以安装unzip/zip

yum install -y unzip zip

##总结
目前这些命令基本能够满足日常开发韵味服务器,但这只是简单的一些操作服务器的命令,如果有更多的需求可以系统的学习linux,那也是一个很大的话题 运维。
————————————————
版权声明:本文为CSDN博主「我爱看明朝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013565163/article/details/79071026

怎么把自己的电脑做成服务器,能让别人访问自己的网页?

做成web服务器需要满足:域名或者公网ip,电脑安装配置web服务,开启80端口允许访问,网站程序。

  1. 域名或者公网ip,这一点一般家用宽带没有固定的公网ip,常用的动态域名解析花生壳,科迈动态解析,建议申请使用花生壳动态域名解析,并设置到路由器上,这样网站的访问域名是花生壳的子域名。

    如果有公网固定ip,建议购买一个域名解析到这个ip上,这个公网ip可以在电脑直接设定。web绑定,防火墙允许80端口就可以了。

  2. 电脑安装配置web服务,这个条件比较好实现 ,找个服务器操作系统,如win2003系统,安装上iis组件就可以了,默认80就打开了,然后再配置一下你程序需要的环境,

    如果.net程序就安装net framwork相应版本,如果php就配置php+mysql环境。

  3. 家用宽带默认80端口在路由器不开放的,需要在路由器上做端口映射,将你个人电脑ip 80端口通过宽带路由映射出去。

    端口映射参考以下教程:

    http://jingyan.baidu.com/article/3a2f7c2e48076426afd611ad.html

  4. 网站程序,自己会开发了可以自己做,不会了到网上下载一些开源程序就可以了。

sql server 2008登陆服务器名称是什么

说明:这是我遇到的一个问题,折磨了很久。

我在网上搜索了半天,大部分人都说是local,localhost,单独的一个点,127.0.0.1等,当时我尝试了都不行,*后再百度知道里找到,用.\myexpress试试,我一试,果然成功了,非常感谢。于是写出来分享给大家

通常情况下,有两种情况,
单独一个小数点
小数点\sqlexpress
不管是什么名称,下面都选择Windows认证

服务器名称查找,具体请在开始-运行那里,输入services.msc回车,在服务里面查找sql server开头的服务,看到底是什么名称

防止SQL注入攻击

using System;
using System.Text;
using System.Runtime.InteropServices;

namespace DBGrep
{
public class SqlLocator
{
[DllImport(“odbc32.dll”)]
private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, out IntPtr outputHandle);
[DllImport(“odbc32.dll”)]
private static extern short SQLSetEnvAttr(IntPtr henv, int attribute, IntPtr valuePtr, int strLength);
[DllImport(“odbc32.dll”)]
private static extern short SQLFreeHandle(short hType, IntPtr handle); [DllImport(“odbc32.dll”, CharSet = CharSet.Ansi)]
private static extern short SQLBrowseConnect(IntPtr hconn, StringBuilder inString, short inStringLength, StringBuilder outString, short outStringLength, out short outLengthNeeded);
private const short SQL_HANDLE_ENV = 1;
private const short SQL_HANDLE_DBC = 2;
private const int SQL_ATTR_ODBC_VERSION = 200;
private const int SQL_OV_ODBC3 = 3;
private const short SQL_SUCCESS = 0;
private const short SQL_NEED_DATA = 99;
private const short DEFAULT_RESULT_SIZE = 1024;
private const string SQL_DRIVER_STR = “DRIVER=SQL SERVER”;

public static string[] GetServers()
{
string[] retval = null;
string txt = string.Empty;
IntPtr henv = IntPtr.Zero;
IntPtr hconn = IntPtr.Zero;
StringBuilder inString = new StringBuilder(SQL_DRIVER_STR);
StringBuilder outString = new StringBuilder(DEFAULT_RESULT_SIZE);
short inStringLength = (short)inString.Length;
short lenNeeded = 0;
try
{
if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, out henv))
{
if (SQL_SUCCESS == SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (IntPtr)SQL_OV_ODBC3, 0))
{
if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, out hconn))
{
if (SQL_NEED_DATA == SQLBrowseConnect(hconn, inString, inStringLength, outString, DEFAULT_RESULT_SIZE, out lenNeeded))
{
if (DEFAULT_RESULT_SIZE < lenNeeded)
{
outString.Capacity = lenNeeded;
if (SQL_NEED_DATA != SQLBrowseConnect(hconn, inString, inStringLength, outString, lenNeeded, out lenNeeded))
{
throw new ApplicationException(“Unabled to aquire SQL Servers from ODBC driver.”);
}
}
txt = outString.ToString();
int start = txt.IndexOf(“{“) + 1;
int len = txt.IndexOf(“}”) – start;
if ((start > 0) && (len > 0))
{
txt = txt.Substring(start, len);
}
else
{
txt = string.Empty;
}
}
}
}
}
}
catch (Exception ex)
{
#if(DEBUG)
Console.WriteLine(“Acquire SQL Servier List Error” + (ex.Message).ToString());
#endif
txt = string.Empty;
}
finally
{
if (hconn != IntPtr.Zero)
{
SQLFreeHandle(SQL_HANDLE_DBC, hconn);
}
if (henv != IntPtr.Zero)
{
SQLFreeHandle(SQL_HANDLE_ENV, hconn);
}
}
if (txt.Length > 0)
{
retval = txt.Split(“,”.ToCharArray());
}
return retval;
}
}
}

2、利用SQLDMO(SQL Distributed Management Objects)
SQLDMO来自SQL Server自带的SQLDMO.dll,其本身是一个COM对象,可以在.net工程中添加对它的应用。然后可以得到以下对象:
SQLDMO.Application
SQLDMO.SQLServer
SQLDMO.Database
SQLDMO.NameList

得到SQL服务器的列表
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();
for(int i=0;i<sqlServers.Count;i++)
{
object srv = sqlServers.Item(i + 1);
if(srv != null)
{
this.cboServers.Items.Add(srv);
}
}
if(this.cboServers.Items.Count > 0)
this.cboServers.SelectedIndex = 0;
else
this.cboServers.Text = “<No available SQL Servers>”;
记住COM的集合从指针1开始,不是0

得到数据库列表
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text);
foreach(SQLDMO.Database db in srv.Databases)
{
if(db.Name!=null)
this.cboDatabase.Items.Add(db.Name);
}

利用c#实现对sql server的信息探测

1、原理简述
对于SQL Server2000来说,打开SQL Server客户端准备连接,当拉开服务器列表的时候,整个局域网所有的SQL Server服务器都被列出来了。这是为什么呢?
原理如下:
从我自己的机器(192.168.0.1)上从1434端口广播(192.168.0.255)了这个UDP包,然后,整个局域网中的SQL Server服务器都开始响应这个UDP数据包,所有这些都是明文传输的,我们可以很容易探测一个IP地址的1434端口,获得该IP地址上运行的SQL Server的相关信息。
这些信息包括:主机名称、实例名称、版本、管道名称以及使用的端口等。这个端口是微软自己使用,而且不象默认的1433端口那样可以改变,1434是不能改变的。
2、程序实现
下面是一个利用1434进行探测的c#程序,核心代码如下(很简单,呵呵) :
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;
namespace ConsoleApplication3
{
class Class1
{
//创建一个UDPCLIENT实例
private static UdpClient m_Client;
//LISTEN用来获取返回的信息
public static string Listen(string hostip)
{
string HostIP = hostip;
IPAddress thisIP = IPAddress.Parse(HostIP);
IPEndPoint host = new IPEndPoint(thisIP,1434);
byte [] data = m_Client.Receive(ref host);
Encoding ASCII = Encoding.ASCII;
String strData = ASCII.GetString(data);
return strData;
}
//SEND
public static void Send(string hostip)
{
string HostIP = hostip;
byte [] buffer = {02};
//02为要发送的数据,只有02、03、04有回应
int ecode = m_Client.Send(buffer,1,HostIP,1434);
//ecode用来返回是否成功发送
if(ecode <= 0)
{
Console.WriteLine(“发送时出错:” + ecode);
}
}
//对返回的信息的简单的处理
public static void OutputInfo(string strdata)
{
string str = strdata;
//str.le
char [] that = {‘;‘,‘;‘};
string [] strofthis =str.Split(that);
//int i= 0 ;
for(int i=0;i
{
Console.Write(strofthis[i]);
Console.Write(‘/n‘);
}

}
//输入IP
public static string InputHostIP()
{
Console.Write(“enter the ip you want to scan:/n/n”);
string hostip =Console.ReadLine();
Console.Write(‘/n‘);
return hostip;
}
//EXIT
public static void Exit()
{
Console.WriteLine(“if you want to exit ,just input 1/n”);
int a = Console.Read();
if(a!= 1)
{
Console.WriteLine(“if you want to exit ,just input 1/n”);
Console.Read();
}
else
{
}
}
[STAThread]

static void Main(string[] args)
{
string HostIP;
HostIP = InputHostIP();
Console.WriteLine(“Begin to send udp to the host”);
m_Client = new UdpClient();
Send(HostIP);
string strData=Listen(HostIP);
OutputInfo(strData);
Exit();
}
}
}
3一个典型的返回的信息
ServerName;AWEN;
InstanceName;AWEN;
IsClustered;No;
Version;8.00.194;
tcp;1044; (TCP的端口,可见就算改了端口也是很容易找到的)
np;//AWEN/pipe/MSSQL$XHT310/sql/query;

一台服务器可以干什么

一、搭建博客
博客程序:Wordpress

虽然说目前已经有 csdn、博客园 这些可以发表文章的网站,但是自由度不高、一些功能受限制

如果自己去部署一个个人网站,灵活性很大,想怎么玩就怎么玩,

**怎么搭建网站:**

*种方法:自己开发 前端(html+css+js / vue)+后端(Django、Flask)+数据库(Mysql+redis)+linux知识——从代码、本地测试、上线、运维

第二种方法:使用框架 WordPress+主题

二、内网穿透
是一个可用于内网穿透的高性能的反向代理应用,支持 TCP,UDP,HTTP,HTTPS 协议。

![](https://s2.ax1x.com/2020/02/29/36BsY9.png)

三、搭建文件系统
都用过百度云——下载 没会员 ,会限速、10kb /s

如果自己搭建一个文件存放系统,想放什么就放什么,下载不限速

**网站备份:**Python写脚本,将指定的文件或者目录 自动上传到百度云,

四、运行爬虫程序
用爬虫写的脚本  丢上面 自己运行  python jiaoben.py  爬好的文件下载下来就可以了。

模拟签到(贴吧签到)、爬小说、爬美女图片

**百度广告联盟:** 去爬一些大众喜欢的,比如美女女;先去爬美女图,假设有10万张,   搭建一个美女图片网站,在你的网站中嵌入百度广告,用户点击之后 百度就会给你钱。

五、做APP服务端
用Java、php、Python 写后端api接口

用框架开发 将前端的代码 糅合在后端里面,分工不明,开发效率有点

php+html写的网站  java/Python

前后端分离技术  vue+django+mysql

六、CPS推广
淘宝、京东、拼多多  之前先去领劵(比如第三方软件:花生日记)

这个完全可以自己对接 淘宝客。。进行CPS推广  不让中间商赚差价

七、微信、QQ机器人
微信机器人:wechat登录你的微信,定时发消息—给女友说上午7点说早安、晚上10点说晚安,

写了一个程序 每天的7点和晚上10点 给女友发消息。

lol  —- 以及可以实现自动回复的功能  在不;–  在  亲爱的怎么了;

QQ机器人:Python写程序  控制一个QQ账号,去群里发消息

构建自己的服务器有什么好处呢?

构建自己的服务器有什么好处呢?笔者总结了几点:
1.如果公司不通外网,同样能解决即时通讯的问题。
2.服务器设置到公司内部,不受外界影响(即可以避免这次的断网所带来影响)。
3.服务器设置可以便于备份数据,也就是一切交流的数据都可以保留到服务器里方便随时提出来使用(同样也对员工起到监督的作用,因为所有的聊天记录管理员都是可以调出来的)。

即时通讯 www.freeeim.com

小型机和服务器有何区别?

小型机是指运行原理类似于PC(个人电脑)和服务器,但性能及用途又与它们截然不同的一种高性能计算机,它是70年代由DCE(数字设备公司)公司首先开发的一种高性能计算产品。

小型机具有区别PC及其服务器的特有体系结构,还有各制造厂自己的专利技术,有的还采用小型机专用处理器,比如美国Sun、日本Fujitsu(富士通)等公司的小型机是基于SPARC处理器架构,而美国HP公司的则是基于PA-RISC架构;Compaq公司是Alpha架构。另外I/O总线也不相同,Fujitsu是PCI,Sun是SBUS,等等。这就意味着各公司小型机机器上的插卡,如网卡、显示卡、SCSI卡等可能也是专用的。此外,小型机使用的操作系统一般是基于Unix的,像Sun、Fujitsu是用Sun Solaris,HP是用HP-Unix,IBM是AIX。所以小型机是封闭专用的计算机系统。使用小型机的用户一般是看中Unix操作系统的安全性、可靠性和专用服务器的高速运算能力。

现在生产小型机的厂商主要有HP、IBM、SUN、浪潮、曙光等.它们的主要特色在于年宕机时间只有几小时,所以又统称为z系列(zero 零)。AS/400主要应用在银行和制造业,还有用于Domino,主要的技术在于TIMI(技术独立机器界面),单级存储,有了TIMI技术可以做到硬件与软件相互独立。RS/6000比较常见,用于科学计算和事务处理等。
----------------------------------------------

*大的区别就是可用性,服务器重要部件坏了就中止服务了,小型机要冗余或者集群,即使一些部件坏了,马上就会有冗余部件接管,不会宕机。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速