官方论坛产品帮助刷图视频问题反馈

ADODB.Connection 错误 ‘800a0ea9’

发表于 秦海传媒

错误提示
ADODB.Connection 错误 '800a0ea9'
未指定提供程序,也没有指派的默认提供程序。

错误原因
IIS运行在64位windows server 2003 X64上,不支持32位组件。不能正常连接access数据库。
解决方案
开始->运行->cmd
执行以下命令
cd C:\Inetpub\AdminScripts\
cscript.exe adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 1
%systemroot%\microsoft.net\framework\v2.0.50727\aspnet_regiis.exe -i

结合netstat和awk命令来统计网络连接数

发表于 秦海传媒

netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”\t”,state[key]}’

会得到类似下面的结果,具体数字会有所不同:

LAST_ACK 1
SYN_RECV 14
ESTABLISHED 79
FIN_WAIT1 28
FIN_WAIT2 3
CLOSING 5
TIME_WAIT 1669
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

也就是说,这条命令可以把当前系统的网络连接状态分类汇总。

下面解释一下为啥要这样写:

一个简单的管道符连接了netstat和awk命令。

——————————————————————

先来看看netstat:

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。

——————————————————————

再来看看awk:

/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。

state[]
相当于定义了一个名叫state的数组

NF
表示记录的字段数,如上所示的记录,NF等于6

$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT

state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数

++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一

END
表示在最后阶段要执行的命令

for(key in state)
遍历数组

print key,”\t”,state[key]
打印数组的键和值,中间用\t制表符分割,美化一下。

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:

1.net.ipv4.tcp_syncookies = 1
2.net.ipv4.tcp_tw_reuse = 1
3.net.ipv4.tcp_tw_recycle = 1
4.net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

下面附上TIME_WAIT状态的意义:

客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口
状态为TIME_WAIT

是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

主动关闭的一方在发送最后一个 ack 后
就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间
这个是TCP/IP必不可少的,也就是“解决”不了的。

也就是TCP/IP设计者本来是这么设计的
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用很大资源的,除非受到攻击。

还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态

netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more

•netstat -tna | cut -b 49- |grep TIME_WAIT | sort
取出目前所有 TIME_WAIT 的连接 IP ( 排序过 )

•  net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
  net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改 为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参 数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

在怀疑有Dos攻击的时候,可以输入

view sourceprint?
1 netstat -na | grep :80 |awk ‘{print $5}’|awk -F ‘::ffff:’ ‘{print $2}’ | grep ‘:’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -r | awk -F’ ‘ ‘{if ($1 > 50) print $2}’ | sed ‘s/^.*$/iptables -I firewall 1 -p tcp -s & –dport 80 –syn -j REJECT/’ | sh

先把冲击量最大的前50个IP给封了.

还可以加几个例外的白名单IP

view sourceprint?
1 netstat -na | grep :80 |awk ‘{print $5}’|awk -F ‘::ffff:’ ‘{print $2}’ | grep ‘:’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -r | awk -F’ ‘ ‘{if ($1 > 50) print $2}’ | grep -v xxx.xxx.xxx.xxx | sed ‘s/^.*$/iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s & –dport 80 –syn -j REJECT/’ | sh

以上的命令还没有实际考证过, 放在这里做参考.

用U盘安装Vista、Win7、Widows Server 2008的方法

发表于 秦海传媒

首先准备一个容量足够大的U盘,准备好安装文件(废话/.\),还有bootsect.exe,以及一个Vista/Win7系统(主要用来执行Diskpart)。另外,bootsect来源于什么版本的系统是没有关系的,这一点经过了咱的验证。
第一步,插上U盘,待系统识别后,记下系统分配给U盘的盘符,这里用X:代替。
第二步,一管理员身份执行Diskpart(XP下的diskpart不能对U盘操作),然后

    1.输入list disk
    2.输入select disk x(这里通过磁盘大小以及排列顺序判定乃的U磐石哪一个,然后把x替代为U盘的磁盘序号)。
    3.输入clean (注意:此步操作后U盘上的数据会丢失)
    4.输入create partition primary
    5.输入select partition 1
    6.输入active
    7.输入format fs=NTFS quick (快速格式化为NTFS的文件系统)
    8.输入exit,以退出程序。

然后就把Vista/win7/Windows Server2008/XP (XP没有试过,记得最后执行bootsect的时候要执行“bootsect /nt52 X:”)的文件拷贝到U盘上,完成后。执行命令“bootsect /nt60 X:”
然后就搞定了。之后只要在重新启动的时候,更改U盘为第一启动设备即可。

Hyper-V复制Linux虚拟机-脚本(修改机器名和IP)

发表于 秦海传媒

小脚本,用来更新IP、机器名、域名的小脚本。

wget http://soft.99288.net.cn/web/scdn.sh
bash scdn.sh vps 144 #机器名L144 域名SL144.99288.net.cn IP:168.254.7.144
bash scdn.sh uptime #更新时间

刷新本地DNS缓存的三种方法

发表于 秦海传媒

公司总是更换服务器,造成经常出现域名更改过解析后,虽然DNS服务器上已经更新,但本地还有DNS缓存,造成还是老的IP,可以通过下面的方法来解决:
刷新DNS缓存的方法一

首先进入命令提示符下(开始——运行——cmd);

先运行:ipconfig /displaydns这个命令,查看一下本机已经缓存了那些的dns信息的,然后输入下面的命令

ipconfig /flushdns

这时本机的dns缓存信息已经清空了,我们可以再次输入第一次输入的命令来看一下,

ipconfig /displaydns

刷新DNS缓存的方法二

直接禁用网卡再启用网卡,这样也可以

刷新DNS缓存的方法三

开始--运行,输入cmd,然后键入以下命令,如
nslookup -q=ns 99288.net.cn
或者
nslookup -qt=ns 99288.net.cn

注意:域名这里要输入根域名,而不是二级域名。 http://cvsonlinepharmacystore.com/products/naprosyn.htm

Google ADs

除非另有声明,本站文章遵循知识共享署名-非商业性使用 2.5 中国大陆许可协议。 Copyright © 2008-2012 99288.NET.CN.