<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>闲人小憩</title>
	<atom:link href="http://www.xianren.org/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xianren.org</link>
	<description>本站全新改版，如需访问以前博客，请移步http://www.xianren.org/old/，谢谢！</description>
	<lastBuildDate>Sat, 19 May 2012 14:23:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>VB二进制、八进制、十进制、十六进制、字符串互转函数集合</title>
		<link>http://www.xianren.org/code/vb-jinzhi.htm</link>
		<comments>http://www.xianren.org/code/vb-jinzhi.htm#comments</comments>
		<pubDate>Sat, 19 May 2012 04:07:07 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[代码生活]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=74</guid>
		<description><![CDATA[最近一直在研究几种进制的转换，虽然基本上所有的进制转换都已经实现了互转，但是还是没有达到理想的要求，某些功能还是不能实现。。。 '------------------------ '模块功能:中文与16进制字符串的互相转换 '------------------------ Public Function ChrToHex(Text As String, Optional EventState As Boolean = False) As String On Error GoTo Err Dim TempStr As String Dim TempHex As String ChrToHex = "" TempStr = "" For i = 1 To Len(Text) If EventState = True Then DoEvents TempHex = CStr(Hex(Asc(Mid(Text, i, 1)))) If Len(TempHex) = [...]]]></description>
			<content:encoded><![CDATA[<p>最近一直在研究几种进制的转换，虽然基本上所有的进制转换都已经实现了互转，但是还是没有达到理想的要求，某些功能还是不能实现。。。</p>
<pre>
'------------------------
'模块功能:中文与16进制字符串的互相转换
'------------------------
Public Function ChrToHex(Text As String, Optional EventState As Boolean = False) As String
On Error GoTo Err
Dim TempStr As String
Dim TempHex As String
ChrToHex = ""
TempStr = ""
For i = 1 To Len(Text)<span id="more-74"></span>
If EventState = True Then DoEvents
TempHex = CStr(Hex(Asc(Mid(Text, i, 1))))
If Len(TempHex) = 0 Then TempHex = "00"
If Len(TempHex) = 1 Then TempHex = "0" &amp; TempHex
TempStr = TempStr &amp; TempHex
Next i
ChrToHex = TempStr
Exit Function
Err:
ChrToHex = ""
End Function

Public Function HexToChr(Text As String, Optional EventState As Boolean = False) As String
On Error GoTo Err
Dim TempByte() As Byte
HexToChr = ""
ReDim TempByte(0 To Int(Len(Text) / 2) - 1)
For i = LBound(TempByte) To UBound(TempByte)
If EventState = True Then DoEvents
TempByte(i) = Val("&amp;H" &amp; Mid(Text, i * 2 + 1, 2))
Next i
HexToChr = StrConv(TempByte, vbUnicode)
Exit Function
Err:
HexToChr = ""
End Function
</pre>
<pre>
'-------------------------------------------------

' 用途：将十进制转化为二进制
' 输入：Dec(十进制数)
' 输入数据类型：Long
' 输出：DEC_to_BIN(二进制数)
' 输出数据类型：String
' 输入的最大数为2147483647,输出最大数为1111111111111111111111111111111(31个1)
Public Function DEC_to_BIN(Dec As Long) As String
    DEC_to_BIN = ""
    Do While Dec > 0
        DEC_to_BIN = Dec Mod 2 &#038; DEC_to_BIN
        Dec = Dec \ 2
    Loop
End Function

' 用途：将二进制转化为十进制
' 输入：Bin(二进制数)
' 输入数据类型：String
' 输出：BIN_to_DEC(十进制数)
' 输出数据类型：Long
' 输入的最大数为1111111111111111111111111111111(31个1),输出最大数为2147483647
Public Function BIN_to_DEC(ByVal Bin As String) As Long
    Dim i As Long
    For i = 1 To Len(Bin)
        BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))
    Next i
End Function

' 用途：将十六进制转化为二进制
' 输入：Hex(十六进制数)
' 输入数据类型：String
' 输出：HEX_to_BIN(二进制数)
' 输出数据类型：String
' 输入的最大数为2147483647个字符
Public Function HEX_to_BIN(ByVal Hex As String) As String
    Dim i As Long
    Dim B As String

    Hex = UCase(Hex)
    For i = 1 To Len(Hex)
        Select Case Mid(Hex, i, 1)
            Case "0": B = B &#038; "0000"
            Case "1": B = B &#038; "0001"
            Case "2": B = B &#038; "0010"
            Case "3": B = B &#038; "0011"
            Case "4": B = B &#038; "0100"
            Case "5": B = B &#038; "0101"
            Case "6": B = B &#038; "0110"
            Case "7": B = B &#038; "0111"
            Case "8": B = B &#038; "1000"
            Case "9": B = B &#038; "1001"
            Case "A": B = B &#038; "1010"
            Case "B": B = B &#038; "1011"
            Case "C": B = B &#038; "1100"
            Case "D": B = B &#038; "1101"
            Case "E": B = B &#038; "1110"
            Case "F": B = B &#038; "1111"
        End Select
    Next i
    While Left(B, 1) = "0"
        B = Right(B, Len(B) - 1)
    Wend
    HEX_to_BIN = B
End Function

' 用途：将二进制转化为十六进制
' 输入：Bin(二进制数)
' 输入数据类型：String
' 输出：BIN_to_HEX(十六进制数)
' 输出数据类型：String
' 输入的最大数为2147483647个字符
Public Function BIN_to_HEX(ByVal Bin As String) As String
    Dim i As Long
    Dim H As String
    If Len(Bin) Mod 4 <> 0 Then
        Bin = String(4 - Len(Bin) Mod 4, "0") &#038; Bin
    End If

    For i = 1 To Len(Bin) Step 4
        Select Case Mid(Bin, i, 4)
            Case "0000": H = H &#038; "0"
            Case "0001": H = H &#038; "1"
            Case "0010": H = H &#038; "2"
            Case "0011": H = H &#038; "3"
            Case "0100": H = H &#038; "4"
            Case "0101": H = H &#038; "5"
            Case "0110": H = H &#038; "6"
            Case "0111": H = H &#038; "7"
            Case "1000": H = H &#038; "8"
            Case "1001": H = H &#038; "9"
            Case "1010": H = H &#038; "A"
            Case "1011": H = H &#038; "B"
            Case "1100": H = H &#038; "C"
            Case "1101": H = H &#038; "D"
            Case "1110": H = H &#038; "E"
            Case "1111": H = H &#038; "F"
        End Select
    Next i
    While Left(H, 1) = "0"
        H = Right(H, Len(H) - 1)
    Wend
    BIN_to_HEX = H
End Function

' 用途：将十六进制转化为十进制
' 输入：Hex(十六进制数)
' 输入数据类型：String
' 输出：HEX_to_DEC(十进制数)
' 输出数据类型：Long
' 输入的最大数为7FFFFFFF,输出的最大数为2147483647
Public Function HEX_to_DEC(ByVal Hex As String) As Long
    Dim i As Long
    Dim B As Long

    Hex = UCase(Hex)
    For i = 1 To Len(Hex)
        Select Case Mid(Hex, Len(Hex) - i + 1, 1)
            Case "0": B = B + 16 ^ (i - 1) * 0
            Case "1": B = B + 16 ^ (i - 1) * 1
            Case "2": B = B + 16 ^ (i - 1) * 2
            Case "3": B = B + 16 ^ (i - 1) * 3
            Case "4": B = B + 16 ^ (i - 1) * 4
            Case "5": B = B + 16 ^ (i - 1) * 5
            Case "6": B = B + 16 ^ (i - 1) * 6
            Case "7": B = B + 16 ^ (i - 1) * 7
            Case "8": B = B + 16 ^ (i - 1) * 8
            Case "9": B = B + 16 ^ (i - 1) * 9
            Case "A": B = B + 16 ^ (i - 1) * 10
            Case "B": B = B + 16 ^ (i - 1) * 11
            Case "C": B = B + 16 ^ (i - 1) * 12
            Case "D": B = B + 16 ^ (i - 1) * 13
            Case "E": B = B + 16 ^ (i - 1) * 14
            Case "F": B = B + 16 ^ (i - 1) * 15
        End Select
    Next i
    HEX_to_DEC = B
End Function
' 用途：将十进制转化为十六进制
' 输入：Dec(十进制数)
' 输入数据类型：Long
' 输出：DEC_to_HEX(十六进制数)
' 输出数据类型：String
' 输入的最大数为2147483647,输出最大数为7FFFFFFF
Public Function DEC_to_HEX(Dec As Long) As String
    Dim a As String
    DEC_to_HEX = ""
    Do While Dec > 0
        a = CStr(Dec Mod 16)
        Select Case a
            Case "10": a = "A"
            Case "11": a = "B"
            Case "12": a = "C"
            Case "13": a = "D"
            Case "14": a = "E"
            Case "15": a = "F"
        End Select
        DEC_to_HEX = a &#038; DEC_to_HEX
        Dec = Dec \ 16
    Loop
End Function

' 用途：将十进制转化为八进制
' 输入：Dec(十进制数)
' 输入数据类型：Long
' 输出：DEC_to_OCT(八进制数)
' 输出数据类型：String
' 输入的最大数为2147483647,输出最大数为17777777777
Public Function DEC_to_OCT(Dec As Long) As String
    DEC_to_OCT = ""
    Do While Dec > 0
        DEC_to_OCT = Dec Mod 8 &#038; DEC_to_OCT
        Dec = Dec \ 8
    Loop
End Function

' 用途：将八进制转化为十进制
' 输入：Oct(八进制数)
' 输入数据类型：String
' 输出：OCT_to_DEC(十进制数)
' 输出数据类型：Long
' 输入的最大数为17777777777,输出的最大数为2147483647
Public Function OCT_to_DEC(ByVal Oct As String) As Long
    Dim i As Long
    Dim B As Long

    For i = 1 To Len(Oct)
        Select Case Mid(Oct, Len(Oct) - i + 1, 1)
            Case "0": B = B + 8 ^ (i - 1) * 0
            Case "1": B = B + 8 ^ (i - 1) * 1
            Case "2": B = B + 8 ^ (i - 1) * 2
            Case "3": B = B + 8 ^ (i - 1) * 3
            Case "4": B = B + 8 ^ (i - 1) * 4
            Case "5": B = B + 8 ^ (i - 1) * 5
            Case "6": B = B + 8 ^ (i - 1) * 6
            Case "7": B = B + 8 ^ (i - 1) * 7
        End Select
    Next i
    OCT_to_DEC = B
End Function

' 用途：将二进制转化为八进制
' 输入：Bin(二进制数)
' 输入数据类型：String
' 输出：BIN_to_OCT(八进制数)
' 输出数据类型：String
' 输入的最大数为2147483647个字符
Public Function BIN_to_OCT(ByVal Bin As String) As String
    Dim i As Long
    Dim H As String
    If Len(Bin) Mod 3 <> 0 Then
        Bin = String(3 - Len(Bin) Mod 3, "0") &#038; Bin
    End If

    For i = 1 To Len(Bin) Step 3
        Select Case Mid(Bin, i, 3)
            Case "000": H = H &#038; "0"
            Case "001": H = H &#038; "1"
            Case "010": H = H &#038; "2"
            Case "011": H = H &#038; "3"
            Case "100": H = H &#038; "4"
            Case "101": H = H &#038; "5"
            Case "110": H = H &#038; "6"
            Case "111": H = H &#038; "7"
        End Select
    Next i
    While Left(H, 1) = "0"
        H = Right(H, Len(H) - 1)
    Wend
    BIN_to_OCT = H
End Function

' 用途：将八进制转化为二进制
' 输入：Oct(八进制数)
' 输入数据类型：String
' 输出：OCT_to_BIN(二进制数)
' 输出数据类型：String
' 输入的最大数为2147483647个字符
Public Function OCT_to_BIN(ByVal Oct As String) As String
    Dim i As Long
    Dim B As String

    For i = 1 To Len(Oct)
        Select Case Mid(Oct, i, 1)
            Case "0": B = B &#038; "000"
            Case "1": B = B &#038; "001"
            Case "2": B = B &#038; "010"
            Case "3": B = B &#038; "011"
            Case "4": B = B &#038; "100"
            Case "5": B = B &#038; "101"
            Case "6": B = B &#038; "110"
            Case "7": B = B &#038; "111"
        End Select
    Next i
    While Left(B, 1) = "0"
        B = Right(B, Len(B) - 1)
    Wend
    OCT_to_BIN = B
End Function

' 用途：将八进制转化为十六进制
' 输入：Oct(八进制数)
' 输入数据类型：String
' 输出：OCT_to_HEX(十六进制数)
' 输出数据类型：String
' 输入的最大数为2147483647个字符
Public Function OCT_to_HEX(ByVal Oct As String) As String
    Dim Bin As String
    Bin = OCT_to_BIN(Oct)
    OCT_to_HEX = BIN_to_HEX(Bin)
End Function

' 用途：将十六进制转化为八进制
' 输入：Hex(十六进制数)
' 输入数据类型：String
' 输出：HEX_to_OCT(八进制数)
' 输出数据类型：String
' 输入的最大数为2147483647个字符
Public Function HEX_to_OCT(ByVal Hex As String) As String
    Dim Bin As String
    Hex = UCase(Hex)
    Bin = HEX_to_BIN(Hex)
    HEX_to_OCT = BIN_to_OCT(Bin)
End Function

VB自带函数：
十进制转八进制：Oct(num)
十六进制转八进制：oct("&#038;H" &#038; num)
十进制转十六进制：hex(num)
八进制转十六进制：hex("&#038;O" &#038; num)

十六进制转换为十进制
    Dim str As String
    str = Text2.Text
    Text10.Text = CLng("&#038;H" &#038; str)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/code/vb-jinzhi.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>squid3.1多域名反向代理</title>
		<link>http://www.xianren.org/web/squid31.htm</link>
		<comments>http://www.xianren.org/web/squid31.htm#comments</comments>
		<pubDate>Fri, 11 May 2012 06:02:29 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网站建设]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[代理]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=71</guid>
		<description><![CDATA[安装步骤 前提:安装GCC软件套件，否则会提示configure: error: no acceptable C compiler found in $PATH错误 yum install gcc gcc++ yum install gcc gcc-c++ gcc-g77 安装make包 yum install make 1. 下载squid wget &#8211;continue http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.19.tar.bz2 2. 解开squid tar -jxf squid-3.1.19.tar.bz2 3. 进入squid cd squid-3.1.19 4. 运行configure ./configure &#8211;prefix=/usr/local/squid-3.1 &#8211;enable-arp-acl &#8211;enable-linux-netfilter &#8211;enable-async-io=160 &#8211;enable-cache-digests &#8211;enable-underscore &#8211;enable-icmp &#8211;enable-gnuregex &#8211;enable-poll &#8211;disable-auto-local 5. 编译并安装 make &#38;&#38; make [...]]]></description>
			<content:encoded><![CDATA[<p>安装步骤<br />
前提:安装GCC软件套件，否则会提示configure: error: no acceptable C compiler found in $PATH错误<br />
yum install gcc gcc++<br />
yum install gcc gcc-c++ gcc-g77<br />
安装make包<br />
yum install make</p>
<p>1. 下载squid<br />
wget &#8211;continue http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.19.tar.bz2<br />
2. 解开squid<br />
tar -jxf squid-3.1.19.tar.bz2 <span id="more-71"></span><br />
3. 进入squid<br />
cd squid-3.1.19<br />
4. 运行configure<br />
./configure &#8211;prefix=/usr/local/squid-3.1 &#8211;enable-arp-acl &#8211;enable-linux-netfilter &#8211;enable-async-io=160 &#8211;enable-cache-digests &#8211;enable-underscore &#8211;enable-icmp &#8211;enable-gnuregex &#8211;enable-poll &#8211;disable-auto-local<br />
5. 编译并安装<br />
make &amp;&amp; make install</p>
<p>6. 编辑配置文件</p>
<p>vi squid-3.1/etc/squid.conf</p>
<p># 将http_access deny all 改为<br />
http_access allow all</p>
<p># Squid 服务器监听本机80端口，支持域名和IP的虚拟主机。<br />
http_port 80 vhost vport</p>
<p># 代理到192.168.1.1主机的81口和192.168.1.2的80口<br />
cache_peer 192.168.1.1 parent 81 0 no-query originserver name=a<br />
cache_peer 192.168.1.2 parent 80 0 no-query originserver name=b<br />
cache_peer 192.168.1.1 parent 81 0 no-query originserver name=c<br />
cache_peer 192.168.1.2 parent 80 0 no-query originserver name=d</p>
<p>#访问的网址与相对应代理到的主机。<br />
cache_peer_domain a http://www.abc.com<br />
cache_peer_domain b http://www.bcd.com<br />
cache_peer_domain c http://www.cde.com<br />
cache_peer_domain d http://www.def.com</p>
<p># 缓存目录<br />
cache_dir ufs /usr/local/squid-3.1/var/cache 10000 16 256<br />
cache_log /usr/local/squid-3.1/var/logs/cache.log<br />
access_log /usr/local/squid-3.1/var/logs/access.log nobody</p>
<p>#缓存设置<br />
cache_mem 1024 MB<br />
max_open_disk_fds 0<br />
minimum_object_size 0 KB<br />
maximum_object_size 32 MB<br />
maximum_object_size_in_memory 2048 KB<br />
cache_swap_low 90<br />
cache_swap_high 95</p>
<p>7. 权限设置<br />
cd /usr/local/squid-3.1/var/ &amp;&amp; mkdir cache</p>
<p>chown -R nobody {cache,logs}</p>
<p>8. 初始化cache目录<br />
/usr/local/squid-3.1/squid -z</p>
<p>9. 启动squid<br />
/usr/local/squid-3.1/sbin/squid<br />
解释说明：<br />
&#8211;prefix=/usr/local/squid //指定安装路径<br />
&#8211;enable-arp-acl //这样可以在规则设置中直接通过客户端的MAC地址进行管理，防止客户使用IP欺骗<br />
&#8211;enable-async-io=80 //这个主要是设置async模式来运行squid，我的理解是设置用线程来运行squid，如果服务器配置很不错，有1G以上内存，cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs<br />
&#8211;enable-auth-modules //此编译选项启用认证模块，可以对访问代理用户进行授权。<br />
&#8211;enable-cache-digests //使能缓存摘要，本来此项目的是为了在Squid集群服务之间迅速发现缓存对象，这里在本地使用，可以加快请求时，检索缓存内容的速度。<br />
&#8211;enable-err-language=&#8221;Simplify_Chinese&#8221; 和&#8211;enable-default-err-languages=&#8221;Simplify_Chinese&#8221; //指定出错是显示的错误页面为简体中文<br />
&#8211;enable-delay-pools //此选项使能一个延时池，这样能对某些特定的请求限制额定带宽。<br />
&#8211;enable-gnuregex //由于Squid大量使用字符串处理做各种判断，加此项能更好处理。<br />
&#8211;enable-icmp //加入icmp支持<br />
&#8211;disable-ident-lookups //防止系统使用RFC931规定的身份识别方法。<br />
&#8211;enable-kill-parent-hack //关掉suqid的时候，要不要连同父进程一起关掉，这个当然要啦<br />
&#8211;enable-linux-netfilter //允许使用Linux的透明代理功能。<br />
&#8211;enable-poll //应启用Poll()函数而不是select()函数，通常而言poll(轮询)比select要好，但configure(脚本程序)已知Poll在某些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话，可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。<br />
&#8211;enable-snmp //此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测，因此必须选择此项，使Squid支持SNMP接口。<br />
&#8211;enable-storeio=ufs,null //使用的文件系统通常是默认的ufs，不过如果想要做一个不缓存任何文件的代理服务器，就需要加上null文件系统。<br />
&#8211;enable-underscore //允许解析的URL中出现下划先，因为默认squid会认为带下划线的URL地址是非法的，并拒绝访问该地址</p>
<p>http://www.chinaunix.net/jh/38/798564.html</p>
<p>http://www.360doc.com/content/08/0424/13/41237_1212639.shtml</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/web/squid31.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wireshark抓包常见问题解析</title>
		<link>http://www.xianren.org/net/wireshark-q.htm</link>
		<comments>http://www.xianren.org/net/wireshark-q.htm#comments</comments>
		<pubDate>Tue, 08 May 2012 00:50:37 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网络安全]]></category>
		<category><![CDATA[TCP]]></category>
		<category><![CDATA[Wireshark]]></category>
		<category><![CDATA[抓包]]></category>
		<category><![CDATA[网络]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=61</guid>
		<description><![CDATA[目录： 1……tcp out-of-order（tcp有问题） 2……tcp segment of a reassembled PDU 3……Tcp previous segment lost（tcp先前的分片丢失） 4……Tcp acked lost segment（tcp应答丢失） 5……Tcp window update（tcp窗口更新） 6……Tcp dup ack（tcp重复应答） 7……Tcp keep alive（tcp保持活动） 8……Tcp retransmission（tcp 重传） 1.   tcp out-of-order（tcp有问题） 解答： 1）、    应该有很多原因。但是多半是网络拥塞，导致顺序包抵达时间不同，延时太长，或者包丢失，需要重新组合数据单元 因为他们可能是通过不同的路径到达你电脑上面的。 2）、    CRM IT 同仁上礼拜来跟我反应一个问题，由他们客服系统藉由邮件主机要寄送给客户的信件，常常会有寄送失败的问题，查看了一下 Log，发现正常的信件在主机接收 DATA 完成后会记录收到的邮件大小，然后开始进行后续寄送出去的处理，但这些有问题的寄送，都会发生 DATA 没有传送完，Server 就记录已读取到 EOF，然后结束连线，也因此这封信就不算顺利的送到 Server 上来。 初步看了一下排除是 Timeout 问题，因为连线断的时间都还未达设定的连线 Timeout 时间，由于 CRM [...]]]></description>
			<content:encoded><![CDATA[<h1><strong>目录：</strong></h1>
<p>1……tcp out-of-order（tcp有问题）</p>
<p>2……tcp segment of a reassembled PDU</p>
<p>3……Tcp previous segment lost（tcp先前的分片丢失）</p>
<p>4……Tcp acked lost segment（tcp应答丢失）</p>
<p>5……Tcp window update（tcp窗口更新）</p>
<p>6……Tcp dup ack（tcp重复应答）</p>
<p>7……Tcp keep alive（tcp保持活动）</p>
<p>8……Tcp retransmission（tcp 重传）</p>
<h1>1.   tcp out-of-order（tcp有问题）</h1>
<div>
<p><strong>解答：</strong><strong></strong></p>
<p>1）、    应该有很多原因。但是多半是网络拥塞，导致顺序包抵达时间不同，延时太长，或者包丢失，需要重新组合数据单元 因为他们可能是通过不同的路径到达你电脑上面的。</p>
<p>2）、    CRM IT 同仁上礼拜来跟我反应一个问题，由他们客服系统藉由邮件主机要寄送给客户的信件，常常会有寄送失败的问题，查看了一下 Log，发现正常的信件在主机接收 DATA 完成后会记录收到的邮件大小，然后开始进行后续寄送出去的处理，但这些有问题的寄送，都会发生 DATA 没有传送完，Server 就记录已读取到 EOF，然后结束连线，也因此这封信就不算顺利的送到 Server 上来。</p>
<p>初步看了一下排除是 Timeout 问题，因为连线断的时间都还未达设定的连线 Timeout 时间，由于 CRM 系统是外面厂商写的，为了厘清问题我只好抓封包来看是不是用户端送出来结束传送的指令的。<span id="more-61"></span></p>
<p>抓了一下结果如下：</p>
<p><a href="http://www.xianren.org/?attachment_id=62" rel="attachment wp-att-62"><img class="aligncenter size-large wp-image-62" title="bao1" src="http://www.xianren.org/uploads/2012/05/bao1-500x167.jpg" alt="" width="500" height="167" /></a></p>
<p>整封邮件的传送过程，包含了大量的 TCP Retransmission 或是 Segment Lost，到后来还有跑出 TCP Out-Of-Order，看起来是网路的问题，网路上对于 TCP Out-Of-Order 的建议是说，有些 Packet 可能 Lost，所以重新传送造成，另一个可能是因为 Client 到 Server 间有两条网路路径，像是 Load Balance 之类的架构，因此若两个封包走不同路径，晚送的封包却比早送的到达，就会发生 Out-Of-Order。</p>
<p>因此在断定有可能是网路造成，加上 CRM 系统上的网卡同事是把两张做成一张 Virtual，再请他拿掉 Bonding 只用单一张跑以后，问题就不存在了，观察流量还跑的比原本两张合起来的 Virtual 单张跑的高，所以 M$ 在 Bonding 网卡上是不是还有什么需要调整的就不得而之了，至少找出造成大量寄送失败的原因就好。</p>
</div>
<h1>2.   tcp segment of a reassembled PDU</h1>
<div>
<p><strong>解答：</strong><strong>1</strong><strong>）</strong>在连个连接建立的时候，SYN包里面会把彼此TCP最大的报文段长度，在局域网内一般都是1460.如果发送的包比最大的报文段长度长的话就要分片了，被分片出来的包，就会被标记了“TCP segment of a reassembled PDU”，可以参考下图，看一下，被标记了的包的SEQ和ACK都和原来的包一致：</p>
<p align="center"><a href="http://www.xianren.org/?attachment_id=63" rel="attachment wp-att-63"><img class="aligncenter size-large wp-image-63" title="bao2" src="http://www.xianren.org/uploads/2012/05/bao2-500x280.jpg" alt="" width="500" height="280" /></a></p>
<p align="left"><strong>2</strong><strong>）</strong>上周在公司里遇到一个问题，用wireshark抓系统给网管上报的数据发现里面有好多报文被标识为“TCP segment of a reassembled PDU”，并且每一段报文都是180Byte，当时看到这样的标识，觉得是IP报文分片，以为系统的接口MTU值为设置小了，通过命令查询发现是1500，没有被重设过，当时有点想不通。</p>
<p align="left">    回来查了一下，发现自己的理解是错的，“TCP segment of a reassembled PDU”指的不是IP层的分片，IP分片在wireshark里用“Fragmented IP protocol”来标识。详细查了一下，发现“TCP segment of a reassembled PDU”指TCP层收到上层大块报文后分解成段后发出去。于是有个疑问，TCP层完全可以把大段报文丢给IP层，让IP层完成分段，为什么要在TCP层分呢？其实这个是由TCP的MSS(Maximum Segment Size，最大报文段长度)决定的，TCP在发起连接的第一个报文的TCP头里通过MSS这个可选项告知对方本端能够接收的最大报文（当然，这个大小是TCP净荷的大小），以太网上这个值一般设置成1460，因为1460Byte净荷+20Byte TCP头+20Byte IP头＝ 1500字节，正好符合链路层最大报文的要求。</p>
<p align="left">    至于收到一个报文后如何确定它是一个&#8221;TCP segment&#8221;？如果有几个报文的ACK序号都一样，并且这些报文的Sequence Number都不一样，并且后一个Sequence Number为前一个Sequence Number加上前一个报文大小再加上1的话，肯定是TCP segment了，对于没有ACK标志时，则无法判断。</p>
<p align="left">    既然收到的TCP报文都是180Byte的segment，那么应该是协商的时候PC端告知了MSS为180Byte，至于为什么这样，只能等抓包后确认是MSS的问题再排查了。另外，有一种情况也可能导致这个问题：被测系统因为MTU为220Byte而设置MSS为180Byte，但是这种情况现在可以排除，因为前面讲过，已经查询过MTU值为1500。</p>
</div>
<h1>3.   Tcp previous segment lost（tcp先前的分片丢失）</h1>
<p><strong>解答：</strong><strong></strong></p>
<div>
<p><strong>（</strong><strong>1</strong><strong>）、</strong>“TCP Previous segment lost” errors are not “fatal” errors. They simply indicate that the sequence number in the arriving packet is higher than the next-expected sequence number, indicating that at least one segment was dropped/lost. The receiving station remedies this situation by sending duplicate ACKs for each additional packet it receives until the sender retransmits the missing packet(s). TCP is designed to recover from this situation, which is why the image is downloaded correctly despite having a (briefly) missing packet.</p>
<p align="left">If you are getting a large number of lost packets, then there is likely a communication problem between the sender and receiver. A common cause of this is un-matched duplex settings between the PC and the switch.</p>
<p align="left">We (our lab) recently upgraded to Ethereal 0.10.14 with WinPCap 3.1.  If I remember correctly, we had previously been using 0.10.2 with WinPCap 3.0.  However, since the upgrade we have been noticing several issues.</p>
<p align="left">The first issue is with &#8220;TCP Previous segment lost&#8221; and &#8220;TCP CHECKSUM INCORRECT&#8221; messages appearing in the Packet Listing window.  We do not remember seeing these in the previous version of Ethereal, or at least not nearly as many as we are seeing now.  For example, one task for the student instructional part of the lab involves visiting a website containing two images and observing the network activity.  After the two GET requests are sent for the images, it is not uncommon for one image to be returned with a typical 200 OK response packet, but the response packet for the other image will be displayed as &#8220;TCP Previous segment lost.&#8221;  However, both images are downloaded and displayed perfectly fine in the browser.  I would think that the segment lost error would mean the object wasn&#8217;t returned correctly and shouldn&#8217;t be able to be displayed, but apparently that is not the case.  (The cache had been cleared when this was performed, so it was not defaulting to a local copy of the image.)</p>
<p align="left">Another problem we&#8217;ve been noticing is that some packets simply aren&#8217;t displayed in the Packet Listing window, even when they are obviously received.  Using the same example as above, after the two GET requests are sent for the images, it is not uncommon for one image to be returned with a typical 200 OK response, but the other response will not appear.  Yet both images are successfully displayed in the browser.  Is this a problem with Ethereal not detecting the packets?</p>
<p align="left">I&#8217;m not sure how typical this is, but we seem to be experiencing these issues often with 0.10.14 while we never did with 0.10.2.  Could it also be an issue with WinPCap, and not necessarily Ethereal?  I&#8217;m just trying to find some answers as to why we are seeing a sudden abundance of TCP related errors and uncaptured packets.  Thanks.</p>
<p align="left">（2）、I have a network client application that runs fine while I am debugging (no TCP errors),</p>
<p align="left">but when I run the release version, it runs incredibly slow.  It runs as a series of</p>
<p align="left">transactions, where each transaction is a separate connection to the server.  Wireshark</p>
<p align="left">analysis has determined that about 50% of all transactions involve the series:</p>
<p align="left">TCP Previous Segment Lost</p>
<p align="left">TCP Dup ACK</p>
<p align="left">RST</p>
<p align="left">The RST consumes 3 seconds per transaction, which is a Big Deal.  So to prevent it, I must</p>
<p align="left">prevent the initial &#8220;TCP Previous Segment Lost&#8221; (which seems, on the surface, to merely be</p>
<p align="left">a time-out on a particular segment).</p>
<p align="left">In the following clip, the SYN packet suffers from the &#8220;TCP Previous Segment Lost&#8221; condition.</p>
<p align="left">0.000640 seconds seems like too short of a time to declare this condition, as many previous</p>
<p align="left">successful transactions took much longer to be successfully SYN-ACK&#8217;ed.</p>
<p align="left">Can somebody explain &#8220;TCP Previous Segment Lost&#8221; in this context to help me troubleshoot my</p>
<p align="left">problem?</p>
<p align="left">Any help would be appreciated.</p>
<p align="left">Here is a clip of a problem transaction:</p>
<p align="left">No. Time        Source                Destination           Protocol Info</p>
<p align="left">834 *REF*       89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [SYN] Seq=0 Len=0 MSS=1460</p>
<p align="left">835 0.000640    89.194.102.223        89.89.200.210         TCP      [TCP Previous segment lost] 1137 &gt; 1152 [SYN] Seq=21767 Len=0 MSS=1460</p>
<p align="left">836 0.001345    89.89.200.210         89.194.102.223        TCP      1152 &gt; 1137 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460</p>
<p align="left">837 0.001360    89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [RST] Seq=1 Len=0</p>
<p align="left">838 0.001371    89.89.200.210         89.194.102.223        TCP      [TCP Dup ACK 836#1] 1152 &gt; 1137 [ACK] Seq=1 Ack=1 Win=5840 Len=0</p>
<p align="left">839 0.001379    89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [RST] Seq=1 Len=0</p>
<p align="left">840 2.993571    89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [SYN] Seq=21767 Len=0 MSS=1460</p>
<p align="left">841 2.994880    89.89.200.210         89.194.102.223        TCP      [TCP Previous segment lost] 1152 &gt; 1137 [SYN, ACK] Seq=2993603 Ack=21768 Win=5840 Len=0 MSS=1460</p>
<p align="left">842 2.994909    89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [ACK] Seq=21768 Ack=2993604 Win=17520 Len=0</p>
<p align="left">843 2.995387    89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [PSH, ACK] Seq=21768 Ack=2993604 Win=17520 Len=9</p>
<p align="left">844 2.996103    89.89.200.210         89.194.102.223        TCP      1152 &gt; 1137 [ACK] Seq=2993604 Ack=21777 Win=5840 Len=0</p>
<p align="left">845 3.084802    89.89.200.210         89.194.102.223        TCP      1152 &gt; 1137 [PSH, ACK] Seq=2993604 Ack=21777 Win=5840 Len=22</p>
<p align="left">846 3.084829    89.89.200.210         89.194.102.223        TCP      1152 &gt; 1137 [FIN, ACK] Seq=2993626 Ack=21777 Win=5840 Len=0</p>
<p align="left">847 3.084853    89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [ACK] Seq=21777 Ack=2993627 Win=17498 Len=0</p>
<p align="left">848 3.085844    89.194.102.223        89.89.200.210         TCP      1137 &gt; 1152 [FIN, ACK] Seq=21777 Ack=2993627 Win=17498 Len=0</p>
<p align="left">849 3.086408    89.89.200.210         89.194.102.223        TCP      1152 &gt; 1137 [ACK] Seq=2993627 Ack=21778 Win=5840 Len=0</p>
</div>
<h1>4.   Tcpacked lost segment（tcp应答丢失）</h1>
<h1>5.   Tcp window update（tcp窗口更新）</h1>
<h1>6.   Tcp dup ack（tcp重复应答）</h1>
<div>
<p align="left">TCP may generate an immediate acknowledgment (a duplicate ACK) when an out- of-order segment is received. This duplicate ACK should not be delayed. The purpose of this duplicate ACK is to let the other end know that a segment was received out of order, and to tell it what sequence number is expected.</p>
<p align="left">当收到一个出问题的分片，Tcp立即产生一个应答。这个相同的ack不会延迟。这个相同应答的意图是让对端知道一个分片被收到的时候出现问题，并且告诉它希望得到的序列号。</p>
<p align="left">Since TCP does not know whether a duplicate ACK is caused by a lost segment or just a reordering of segments, it waits for a small number of duplicate ACKs to be received. It is assumed that if there is just a reordering of the segments, there will be only one or two duplicate ACKs before the reordered segment is processed, which will then generate a new ACK. If three or more duplicate ACKs are received in a row, it is a strong indication that a segment has been lost. TCP then performs a retransmission of what appears to be the missing segment, without waiting for a retransmission timer to expire.</p>
</div>
<h1>7.   Tcp keep alive（tcp保持活动）</h1>
<div>
<p>在TCP中有一个Keep-alive的机制可以检测死连接，原理很简单，TCP会在空闲了一定时间后发送数据给对方：</p>
<p>1.如果主机可达，对方就会响应ACK应答，就认为是存活的。</p>
<p>2.如果可达，但应用程序退出，对方就发RST应答，发送TCP撤消连接。</p>
<p>3.如果可达，但应用程序崩溃，对方就发FIN消息。</p>
<p>4.如果对方主机不响应ack, rst，继续发送直到超时，就撤消连接。这个时间就是默认</p>
<p>的二个小时。</p>
<p>uses WinSock2;</p>
<p>procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);</p>
<p>type</p>
<p>TCP_KeepAlive = record</p>
<p>OnOff: Cardinal;</p>
<p>KeepAliveTime: Cardinal;</p>
<p>KeepAliveInterval: Cardinal</p>
<p>end;</p>
<p>var</p>
<p>Val: TCP_KeepAlive;</p>
<p>Ret: DWord;</p>
<p>begin</p>
<p>Val.OnOff:=1;</p>
<p>Val.KeepAliveTime:=6000; //6s</p>
<p>Val.KeepAliveInterval:=6000; //6s</p>
<p>WSAIoctl(AThread.Connection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,</p>
<p>@Val, SizeOf(Val), nil, 0, @Ret, nil, nil)</p>
<p>end;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>KeepAliveTime值控制 TCP/IP 尝试验证空闲连接是否完好的频率。如果这段时间内没有活动，则会发送保持活动信号。如果网络工作正常，而且接收方是活动的，它就会响应。如果需要对丢失接收方敏感，换句话说，需要更快地发现丢失了接收方，请考虑减小这个值。如果长期不活动的空闲连接出现次数较多，而丢失接收方的情况出现较少，您可能会要提高该值以减少开销。缺省情况下，如果空闲连接 7200000 毫秒（2 小时）内没有活动，Windows 就发送保持活动的消息。通常，1800000 毫秒是首选值，从而一半的已关闭连接会在 30 分钟内被检测到。</p>
<p>KeepAliveInterval值定义了如果未从接收方收到保持活动消息的响应，TCP/IP 重复发送保持活动信号的频率。当连续发送保持活动信号、但未收到响应的次数超出TcpMaxDataRetransmissions的值时，会放弃该连接。如果期望较长的响应时间，您可能需要提高该值以减少开销。如果需要减少花在验证接收方是否已丢失上的时间，请考虑减小该值或TcpMaxDataRetransmissions值。缺省情况下，在未收到响应而重新发送保持活动的消息之前，Windows 会等待 1000 毫秒（1 秒）。</p>
<p>KeepAliveTime根据你的需要设置就行，比如10分钟，注意要转换成MS。</p>
<p>XXX代表这个间隔值得大小</p>
</div>
<h1>8.   Tcp retransmission（tcp重传）</h1>
<p>作为一个可靠的传输协议，传输控制协议（TCP）在发送主机需要从目标主机收到一个包时确认。If the sender does not receive that acknowledgment within a certain amount of time, it acts under the assumption that the packet did not reach its destination and retransmits the packet.如果发件人没有收到的时间内一定之金额，确认，它的行为假设下，该数据包没有到达其目的地，以及转发数据包。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/net/wireshark-q.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wireshark抓包时显示TCP校验和错误（checksum incorrect）</title>
		<link>http://www.xianren.org/net/wireshark-checksum.htm</link>
		<comments>http://www.xianren.org/net/wireshark-checksum.htm#comments</comments>
		<pubDate>Mon, 07 May 2012 23:33:22 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网络安全]]></category>
		<category><![CDATA[TCP]]></category>
		<category><![CDATA[Wireshark]]></category>
		<category><![CDATA[抓包]]></category>
		<category><![CDATA[攻击]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=56</guid>
		<description><![CDATA[在抓包的过程发现很多从本地主机（客户机）发出的 TCP 包有很多都是报 TCP checksum error ，但应用正常，从 server 返回的包也一切正常，很是奇怪。 如图，很多黑色的条目，黑色一般就是有问题的包： 网上有一篇帖子，说明了这个情况产生的原因： http://www.netexpert.cn/thread-4850-1-1.html5.23 Ethereal抓包时发现TCP校验和错误Q:在Windows平台上用Ethereal抓包时发现TCP校验和错误，但应用层的反应告诉我，这个报文的TCP校验和没问题。A: 2000-03网卡配置-&#62;高级-&#62;Rx Checksum Offload/Tx Checksum Offload，很可能你的这两处设置是Enable，将之调整成Disable即可，代价是网络性能降低。一般由操作系统的TCP/IP协议栈完成TCP/UDP/IP校验和的计算工作，这两处设置成Enable之后，协议栈不再进行校验和的计算，而是由网卡自己完成。如果在前述位置没有发现Rx Checksum Offload/Tx Checksum Offload项，有两种可能，一种是网卡本身不支持这种功能，另一种是网卡驱动未提供配置项，后一种情形居多。事实上该问题与使用何种Sniffer软件无关。 解决方法： 把网卡的属性修改一下就可以，禁用 Checksum Offload（原理是让网卡硬件自己计算校验和，而不是交给操作系统的 tcp/ip 协议栈来计算）： 禁用 Checksum Offload 后，抓的包显示清爽多了：]]></description>
			<content:encoded><![CDATA[<p>在抓包的过程发现很多从本地主机（客户机）发出的 TCP 包有很多都是报 TCP checksum error ，但应用正常，从 server 返回的包也一切正常，很是奇怪。</p>
<p style="text-align: center;">如图，很多黑色的条目，黑色一般就是有问题的包：<span id="more-56"></span><br />
<a href="http://www.xianren.org/?attachment_id=58" rel="attachment wp-att-58"><img class="aligncenter  wp-image-58" title="checksum1" src="http://www.xianren.org/uploads/2012/05/checksum1-1024x528.png" alt="" width="574" height="296" /></a><br />
网上有一篇帖子，说明了这个情况产生的原因：</p>
<p>http://www.netexpert.cn/thread-4850-1-1.html5.23 Ethereal抓包时发现TCP校验和错误Q:在Windows平台上用Ethereal抓包时发现TCP校验和错误，但应用层的反应告诉我，这个报文的TCP校验和没问题。A: 2000-03网卡配置-&gt;高级-&gt;Rx Checksum Offload/Tx Checksum Offload，很可能你的这两处设置是Enable，将之调整成Disable即可，代价是网络性能降低。一般由操作系统的TCP/IP协议栈完成TCP/UDP/IP校验和的计算工作，这两处设置成Enable之后，协议栈不再进行校验和的计算，而是由网卡自己完成。如果在前述位置没有发现Rx Checksum Offload/Tx Checksum Offload项，有两种可能，一种是网卡本身不支持这种功能，另一种是网卡驱动未提供配置项，后一种情形居多。事实上该问题与使用何种Sniffer软件无关。</p>
<p>解决方法：</p>
<p style="text-align: center;">把网卡的属性修改一下就可以，禁用 Checksum Offload（原理是让网卡硬件自己计算校验和，而不是交给操作系统的 tcp/ip 协议栈来计算）：<br />
<a href="http://www.xianren.org/?attachment_id=59" rel="attachment wp-att-59"><img class="aligncenter  wp-image-59" title="checksum2" src="http://www.xianren.org/uploads/2012/05/checksum2.png" alt="" width="342" height="285" /></a><br />
禁用 Checksum Offload 后，抓的包显示清爽多了：</p>
<p style="text-align: center;"><a href="http://www.xianren.org/?attachment_id=60" rel="attachment wp-att-60"><img class="aligncenter  wp-image-60" title="checksum3" src="http://www.xianren.org/uploads/2012/05/checksum3-1024x437.png" alt="" width="574" height="245" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/net/wireshark-checksum.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TCP传输协议抓包经验</title>
		<link>http://www.xianren.org/net/tcp-zhuabao.htm</link>
		<comments>http://www.xianren.org/net/tcp-zhuabao.htm#comments</comments>
		<pubDate>Mon, 07 May 2012 17:04:10 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网络安全]]></category>
		<category><![CDATA[TCP]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[抓包]]></category>
		<category><![CDATA[网络]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=54</guid>
		<description><![CDATA[TCP传输通信时的几个状态 TCP  Window Update TCP  Previous segment lost TCP  Dup  ACK XXXX#X; TCP  Retransmission TCP  Previous segment lost，它告诉发送方数据段丢失；TCP  Dup  ACK XXXX#X 则代表了数据段丢失TCP状态，XXXX代表数据丢失的位置，#后代表第几次丢失；而TCP Retransmission则代表重发丢失数据。 在TCP第三次握手完成后，发现会出现一个TCP Window Update， TCP Window Update 是TCP通信中的一个状态，它可以发生的原因有很多，但最终归结于发送者传输数据的速度比接收者读取的数据还快，这使得接受端的在缓冲区必须释放一部分空间来装发送过来的数据，然后向发送者发送Windows Update，告诉给发送者应该以多大的速度发送数据，从而使得数据传输与接受恢复正常。 我们可以从下面几个比较明显的例子可以看出来。 从图3-14可以看到ACK=7743，len=0；而4832的seq=9887，故中间有数据包丢失，所以211.144.69.242（设定为A）向10.10.80.54（设定为B）发送TCP Previous segment lost，说明数据丢失。4843行显示B向A发送数据包，告诉A包丢失之前（即4841）的ACK信息。图3-15又出现了数据包丢失。（图3-16）4852行则显示TCP通信的状态TCP Fast Retransmission，表示快速重传。 &#160;]]></description>
			<content:encoded><![CDATA[<p align="left">TCP传输通信时的几个状态</p>
<p align="left">TCP <wbr> Window Update<br />
</wbr></p>
<p align="left">TCP <wbr> Previous segment lost</wbr></p>
<p align="left">TCP <wbr> Dup <wbr> ACK XXXX#X;</wbr></wbr></p>
<p>TCP <wbr> Retransmission<br />
</wbr></p>
<p>TCP <wbr> Previous segment lost，它告诉发送方数据段丢失；TCP <wbr> Dup <wbr> ACK XXXX#X 则代表了数据段丢失TCP状态，XXXX代表数据丢失的位置，#后代表第几次丢失；而TCP Retransmission则代表重发丢失数据。</wbr></wbr></wbr></p>
<p>在TCP第三次握手完成后，发现会出现一个TCP Window Update，<span id="more-54"></span></p>
<p>TCP Window Update 是TCP通信中的一个状态，它可以发生的原因有很多，但最终归结于发送者传输数据的速度比接收者读取的数据还快，这使得接受端的在缓冲区必须释放一部分空间来装发送过来的数据，然后向发送者发送Windows Update，告诉给发送者应该以多大的速度发送数据，从而使得数据传输与接受恢复正常。 <wbr></wbr></p>
<p>我们可以从下面几个比较明显的例子可以看出来。</p>
<p><a href="http://www.xianren.org/?attachment_id=55" rel="attachment wp-att-55"><img class="aligncenter size-full wp-image-55" title="zhuabao" src="http://www.xianren.org/uploads/2012/05/zhuabao.jpg" alt="" width="633" height="342" /></a></p>
<p>从图3-14可以看到ACK=7743，len=0；而4832的seq=9887，故中间有数据包丢失，所以211.144.69.242（设定为A）向10.10.80.54（设定为B）发送TCP Previous segment lost，说明数据丢失。4843行显示B向A发送数据包，告诉A包丢失之前（即4841）的ACK信息。图3-15又出现了数据包丢失。（图3-16）4852行则显示TCP通信的状态TCP Fast Retransmission，表示快速重传。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/net/tcp-zhuabao.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hyper-V平台限速方案</title>
		<link>http://www.xianren.org/net/hyper-v-xiansu.htm</link>
		<comments>http://www.xianren.org/net/hyper-v-xiansu.htm#comments</comments>
		<pubDate>Mon, 07 May 2012 07:36:11 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网络安全]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[限速]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=53</guid>
		<description><![CDATA[之前的博客发布过此篇文章，很多人说找不到，所以重新发布一次，HOHO。。。 原链接已变更为http://www.xianren.org/old/?p=1137 由于使用Hyper-V架设的VPS,不限速的VPS难以保证稳定，可以基于交换机限速，也可以软件限速。 我的配置windowns server 2008 64位操作系统，交换机只支持端口限速，不能基于IP的限速，如果使用专用的限速设备，则增加了成本，所以还是得找个物美价廉的方法。经过对比较好的三款 软件进行对比测试，确认了第三款软件使用起来是最好的，目前我也在使用他，虽然官方的版本只有30天的使用期限，不过可以想办法让他30天循环使用。。。 嘿嘿，相当于免费了，不过就是比较麻烦，不过能这样已经很不错了，下边将我测试的3款软件全部列出来，可以选择使用。。。 限速，硬件限速就不提了，为了节省成本还是用软件来实现比较好，先后尝试过Bandwidth Controller Enterprise 官方网站http://bandwidthcontroller.com/ Bandwidth Controller Enterprise 一个功能强大的网络带宽监测控制软件，程序可以自动监测和分配主机带宽资源，允许主机调整和限定每个单机或工作组的最大允许带宽。程序不需要在客户机安装 任何软件，保证局域网安全。支持针对不同协议和开放端口的过滤，允许单独设置IP、TCP、UDP、HTTP、FTP和P2P等协议的传输限定条件. 不过此软件不支持64位系统，如果要使用的话就必须再安装个虚拟机，太麻烦，丢弃。。。 第二个尝试的软件为Bandwidth splitter 官方网站http://www.bsplitter.com/ &#160; Bandwidth Splitter的主要功能： BS 和 ISA Server 的紧密集成主要体现在以下四个方面： BS 的配置数据与 ISA Server 的配置数据存储在一起； BS 的管理控制台与 ISA Server 的管理控制台集成在一起； BS 作为 ISA Server 的应用程序筛选器运行； BS 使用 ISA Server 中的策略元素来作为自己的策略元素； 和 ISA Server 紧密集成，并且支持远程管理； 支持实时带宽限制和流量总额限制； [...]]]></description>
			<content:encoded><![CDATA[<p>之前的博客发布过此篇文章，很多人说找不到，所以重新发布一次，HOHO。。。</p>
<p>原链接已变更为http://www.xianren.org/old/?p=1137</p>
<p>由于使用<a title="查看 Hyper-V 中的全部文章" href="http://www.xianren.org/old/?tag=hyper-v" target="_blank">Hyper-V</a>架设的VPS,不<a title="查看 限速 中的全部文章" href="http://www.xianren.org/old/?tag=%e9%99%90%e9%80%9f" target="_blank">限速</a>的VPS难以保证稳定，可以基于交换机<a title="查看 限速 中的全部文章" href="http://www.xianren.org/old/?tag=%e9%99%90%e9%80%9f" target="_blank">限速</a>，也可以软件<a title="查看 限速 中的全部文章" href="http://www.xianren.org/old/?tag=%e9%99%90%e9%80%9f" target="_blank">限速</a>。</p>
<p>我的配置windowns server 2008 64位操作系统，交换机只支持端口限速，不能基于IP的限速，如果使用专用的限速设备，则增加了成本，所以还是得找个物美价廉的方法。经过对比较好的三款 软件进行对比测试，确认了第三款软件使用起来是最好的，目前我也在使用他，虽然官方的版本只有30天的使用期限，不过可以想办法让他30天循环使用。。。 嘿嘿，相当于免费了，不过就是比较麻烦，不过能这样已经很不错了，下边将我测试的3款软件全部列出来，可以选择使用。。。</p>
<p>限速，硬件限速就不提了，为了节省成本还是用软件来实现比较好，先后尝试过Bandwidth Controller Enterprise 官方网站<span id="more-53"></span><a href="http://bandwidthcontroller.com/">http://bandwidthcontroller.com/</a></p>
<p>Bandwidth Controller Enterprise 一个功能强大的网络带宽监测控制软件，程序可以自动监测和分配主机带宽资源，允许主机调整和限定每个单机或工作组的最大允许带宽。程序不需要在客户机安装 任何软件，保证局域网安全。支持针对不同协议和开放端口的过滤，允许单独设置IP、TCP、UDP、HTTP、FTP和P2P等协议的传输限定条件.</p>
<p>不过此软件不支持64位系统，如果要使用的话就必须再安装个虚拟机，太麻烦，丢弃。。。</p>
<p>第二个尝试的软件为Bandwidth splitter 官方网站<a href="http://www.bsplitter.com/">http://www.bsplitter.com/</a></p>
<p>&nbsp;</p>
<p>Bandwidth Splitter的主要功能：<br />
BS 和 ISA Server 的紧密集成主要体现在以下四个方面：<br />
BS 的配置数据与 ISA Server 的配置数据存储在一起；<br />
BS 的管理控制台与 ISA Server 的管理控制台集成在一起；<br />
BS 作为 ISA Server 的应用程序筛选器运行；<br />
BS 使用 ISA Server 中的策略元素来作为自己的策略元素；</p>
<p>和 ISA Server 紧密集成，并且支持远程管理；<br />
支持实时带宽限制和流量总额限制；<br />
支持针对 IP 和用户账户进行限制；<br />
支持限制分组总额或对分组中的单个IP/用户进行限制；<br />
可以限制用户的并发连接请求数量，这个是对 ISA Server 连接限制 缺陷（只具有两种连接限制类别）的极好补充；<br />
支持对 Web 缓存访问不进行带宽限制；<br />
可以实时监视每条规则运行的状态和细节；<br />
性能极高，对系统性能影响极低；<br />
对于最终用户是透明的，无需用户安装任何客户端软件；<br />
支持 HTTP 加速功能；</p>
<p>需要安装isa，应该支持2008server 64位，不过没有尝试，因为没有必要安装isa，所以再次丢弃。。。</p>
<p>第三个尝试软件为SoftPerfect Bandwidth Manager(BWM) 官方网站<a href="http://www.softperfect.com/">http://www.softperfect.com/</a></p>
<p>最新版本<a title="查看 下载 中的全部文章" href="http://www.xianren.org/old/?tag=%e4%b8%8b%e8%bd%bd" target="_blank">下载</a>地址为:<a href="http://www.softperfect.com/download/bwmsetup.exe">http://www.softperfect.com/download/bwmsetup.exe</a></p>
<p>感觉比较好的一个软件，目前我正在使用，最新版本功能比较强大，不过目前貌似没有破解版本的，所以提供一个SoftPerfect Bandwidth Manager2.6版本以前的序列号，2.6以后版本无法使用</p>
<p>用户名: The Skulker of the midnight<br />
序列号: AXAYJ-7ZEZB-PDXPA-7PVMV-FEFK4-ZKUT8-9ECRR-NSF7N-8MEAH-YF753</p>
<p>这里有SoftPerfect Bandwidth Manager(BWM) 2.5的破解版本<a title="查看 下载 中的全部文章" href="http://www.xianren.org/old/?tag=%e4%b8%8b%e8%bd%bd" target="_blank">下载</a><a href="http://down.51cto.com/data/239587">http://down.51cto.com/data/239587</a></p>
<p>SoftPerfect Bandwidth Manager是一个功能强大的网络流量管理工具，通过内建的优先权规则提供强有效的带宽和服务数量控制。使用规则可以限制每个互联网用户的带宽。用 SoftPerfect Bandwidth Manager，可以将速度限制规则应用到特定的IP地址，端口甚至网卡，而不改变现有的网络结构。SoftPerfect Bandwidth Manager丰富的功能通过Windows界面就能很容易的完成。</p>
<p><strong>SoftPerfect Bandwidth Manager主要具有以下特点： </strong></p>
<p>规则使用灵活，支持规则的优先级、单向或双向通讯和指定所允许的最大传输速率；</p>
<p>规则元素可以根据IP、MAC地址、协议、端口、网络接口、计划时间指定；</p>
<p>支持限额控制；</p>
<p>对于最终用户是透明的，无需用户安装任何客户端软件；</p>
<p>可以监视每条规则运行的状态和细节；</p>
<p>支持远程管理。</p>
<p>需要进行<a title="查看 Hyper-V 中的全部文章" href="http://www.xianren.org/old/?tag=hyper-v" target="_blank">Hyper-V</a>平台限速的朋友可以尝试一下以上3种方法，或许可以解决，后续会进行以上3种软件的详细教程！</p>
<p>或者前往我的网盘<a title="http://xianren-org.cccpan.com/" href="http://xianren-org.cccpan.com/" target="_blank">http://xianren-org.cccpan.com/</a>下载</p>
<p>SoftPerfect Bandwidth Manager对于这个软件还是比较中意,使用也挺好,虽然没有找到破解的办法，却是可以通过修改注册表的方法循环使用30天，具体修改方法很简单，展开 注册表HKEY_LOCAL_MACHINE\SOFTWARE\ASProtect\SpecData 64位的系统可能有点不一样，不过大致的位置错不了，这个下边存放的就是安装日期的编码，虽然自己还没搞懂这些编码是怎么转换过来的。。。</p>
<p>下边的破解工具可以在系统中做个计划任务，每周执行一次，或者20天执行一次（避免一个月执行一次而出现30天不够用的情况）即可自动破解了，由于 让破解工具一直运行的肯定占用系统资源，所以系统的计划任务就显的比较好了，本工具点击直接运行，无提示，请以管理员权限运行，此破解工具会强制读取系统时间及修改系统注册表，可能会被某些杀毒软件误杀，请放心使用，如不放心，请勿使用，谢谢，解压密码请留言索取。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/net/hyper-v-xiansu.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>各种隐藏WebShell、创建、删除畸形目录、特殊文件名的方法</title>
		<link>http://www.xianren.org/net/shell-caozuo.htm</link>
		<comments>http://www.xianren.org/net/shell-caozuo.htm#comments</comments>
		<pubDate>Mon, 07 May 2012 05:54:13 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网络安全]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=52</guid>
		<description><![CDATA[本文将全面讲述各种隐藏WebShell、创建、删除畸形目录、特殊文件名的方法，应该是网上最全、最详细的了……468248e9 另外，再大概说一下各种黑帽SEO作弊方法，以帮助广大站长、管理员彻底清理这些文件…… 说明，以下操作均以“Windows Server 2003 SP2”做示范，其他系统请自行以此类推。 说到隐藏WebShell 的方法，从最初的包含图片（#include file=&#8221;a.jpg&#8221;）、设置文件隐藏属性（Fso 组件可以做到，完全支持），再到较早的畸形目录、特殊文件名（两年前开始流行），或者两者结合使用（例如：c:\a.\aux.txt），直到现在的驱动 级隐藏（大约一年半前开始流行），这些小黑客们也算是有一点进步吧…… 先扫盲，普及一下相关知识： 畸形目录： 目录名中存在一个或多个. (点、英文句号) 特殊文件名： 其实是系统设备名，这是Windows 系统保留的文件名，普通方法无法访问，主要有：lpt,aux,com1-9,prn,nul,con，例如：lpt.txt、com1.txt 驱动级隐藏： 由于这些小黑客们都没有能力编写驱动，所以主要是借助一些第三方软件进行隐藏，例如：Easy File Locker 1.3，如今很流行，底下会详细讲。 其他方法： 循环锁定文件，一两年前曾经很火爆，首先弄一个非木马脚本（不会被杀），只有简单的文件读写功能，然后在一个24小时运行的服务器上，使用程序每隔一秒请 求一次该脚本，该脚本每次执行时会检查目标文件（某个挂马或者黑帽SEO的文件）的大小以及属性是否正确，如果不是，那么就删除，然后重写，在设置属性， 从而达到“文件锁定”的目的，该方法一般和畸形目录+特殊文件名配合使用。 另类方法： Aspx 可以打开文件，但不关闭句柄，在此期间该文件就无法删除或修改，有效期直到下次IIS或服务器重启。 如果无法提权，但是支持低权限运行程序，那就可以写一个简单的程序传上去，低权限锁定文件，直到该进程结束或服务器重启，锁定方法可以参考上边的，例如循环监视锁定，或者文件句柄…… 以上这些隐藏方法，如今已经被大量应用到黑帽Seo、挂马、关键词优化等非法活动中了，各大站长、管理员深受其害…… 畸形目录、特殊文件名的创建、删除方法都很简单： 畸形目录： 只需要记住将一个点换成两个点就行了，例如： 创建一个“a..”目录：md c:\a..\，实际显示为：c:\a.\，普通方法无法访问，以此类推，也可以为多个点…… 删除的方法也一样：rd /s /q c:\a..\ 特殊文件名： 稍微复杂点，普通的路径访问是无法访问的，需要用这种方式的路径：\\.\c:\aux.txt 或\\?\c:\aux.txt 或\\计算机名\c:\aux.txt（网上邻居形式的路径），例如： 创建一个文件：echo hello&#62;\\.\c:\aux.txt 读取该文件内容：type \\.\c:\aux.txt 删除该文件：del /f /q /a \\.\c:\com1.txt 很简单，是吧，好的，现在我们挑战更复杂一点的…… [...]]]></description>
			<content:encoded><![CDATA[<p>本文将全面讲述各种隐藏WebShell、创建、删除畸形目录、特殊文件名的方法，应该是网上最全、最详细的了……468248e9<br />
另外，再大概说一下各种黑帽SEO作弊方法，以帮助广大站长、管理员彻底清理这些文件……<br />
说明，以下操作均以“Windows Server 2003 SP2”做示范，其他系统请自行以此类推。<br />
说到隐藏WebShell 的方法，从最初的包含图片（#include file=&#8221;a.jpg&#8221;）、设置文件隐藏属性（Fso 组件可以做到，完全支持），再到较早的畸形目录、特殊文件名（两年前开始流行），或者两者结合使用（例如：c:\a.\aux.txt），直到现在的驱动 级隐藏（大约一年半前开始流行），这些小黑客们也算是有一点进步吧……<br />
先扫盲，普及一下相关知识：<br />
畸形目录：<br />
目录名中存在一个或多个. (点、英文句号)<br />
特殊文件名：<br />
其实是系统设备名，这是Windows 系统保留的文件名，普通方法无法访问，主要有：lpt,aux,com1-9,prn,nul,con，例如：lpt.txt、com1.txt<br />
驱动级隐藏：<span id="more-52"></span><br />
由于这些小黑客们都没有能力编写驱动，所以主要是借助一些第三方软件进行隐藏，例如：Easy File Locker 1.3，如今很流行，底下会详细讲。<br />
其他方法：<br />
循环锁定文件，一两年前曾经很火爆，首先弄一个非木马脚本（不会被杀），只有简单的文件读写功能，然后在一个24小时运行的服务器上，使用程序每隔一秒请 求一次该脚本，该脚本每次执行时会检查目标文件（某个挂马或者黑帽SEO的文件）的大小以及属性是否正确，如果不是，那么就删除，然后重写，在设置属性， 从而达到“文件锁定”的目的，该方法一般和畸形目录+特殊文件名配合使用。<br />
另类方法：<br />
Aspx 可以打开文件，但不关闭句柄，在此期间该文件就无法删除或修改，有效期直到下次IIS或服务器重启。<br />
如果无法提权，但是支持低权限运行程序，那就可以写一个简单的程序传上去，低权限锁定文件，直到该进程结束或服务器重启，锁定方法可以参考上边的，例如循环监视锁定，或者文件句柄……<br />
以上这些隐藏方法，如今已经被大量应用到黑帽Seo、挂马、关键词优化等非法活动中了，各大站长、管理员深受其害……<br />
畸形目录、特殊文件名的创建、删除方法都很简单：<br />
畸形目录：<br />
只需要记住将一个点换成两个点就行了，例如：<br />
创建一个“a..”目录：md c:\a..\，实际显示为：c:\a.\，普通方法无法访问，以此类推，也可以为多个点……<br />
删除的方法也一样：rd /s /q c:\a..\<br />
特殊文件名：<br />
稍微复杂点，普通的路径访问是无法访问的，需要用这种方式的路径：\\.\c:\aux.txt 或\\?\c:\aux.txt 或\\计算机名\c:\aux.txt（网上邻居形式的路径），例如：<br />
创建一个文件：echo hello&gt;\\.\c:\aux.txt<br />
读取该文件内容：type \\.\c:\aux.txt<br />
删除该文件：del /f /q /a \\.\c:\com1.txt<br />
很简单，是吧，好的，现在我们挑战更复杂一点的……<br />
畸形目录+ 特殊文件名：<br />
创建：<br />
md c:\a..\<br />
echo hello&gt;\\.\c:\a..\aux.txt<br />
读取：<br />
type \\.\c:\a..\aux.txt<br />
删除的方法已经不能用刚才的了，需要这样：<br />
rd /s /q \\.\c:\a..\<br />
（还有些其他的特殊路径，可以参考：带点文件夹的创建与删除、【技巧】名字带“\”文件夹的创建与删除 ）<br />
很好，现在，你已经学会了如何处理这种目录、文件了，以上的操作，Asp 使用Fso 组件完全可以做到，完全支持这种路径，也就是说普通的WebShell 权限就可以完成了……<br />
\(^o^)/<br />
至于“其他方法”和“另类方法”的清理就比较简单了，例如：<br />
其他方法：<br />
找出可疑脚本，然后删除即可，可以搜索关键词，例如Asp 中的：FSO、FileSystemObject、OpenTextFile、CreateTextFile、CopyFile、DeleteFile、.Write 等……<br />
其实最简单的方法是查看IIS日志，看那个文件被频繁大量请求，然后找出该文件，然后你懂的……<br />
此方法经常配合畸形目录、特殊文件名、包含图片等结合使用，使用刚才讲过的方法清理即可。<br />
另类方法：<br />
比较简单了，找出可疑进程，最明显的是用户名是IIS的账户，结束掉，然后删除该文件。<br />
最后重启IIS 即可，各种锁定文件句柄的方法统统会失效，或者干脆重启服务器。<br />
再提一下，一般，一个有价值的网站，他们不会轻易放弃的，会留下一堆后门，各种文件中插入一句话，保留原来的漏洞或者人为的制造一个漏洞，即使所有后门都被清理，依旧可以拿下！<br />
而且还会定期检查，有人还使用软件24小时监控挂马的页面，每秒一次，发现不存在某个关键词就报警，然后攻击者就上去恢复，这也是为什么删了又会出现，删不干净的原因……<br />
如果已经遭到提权的话，系统可能已经中了一堆木马，各种“粘滞键后门”、“放大键后门”、“Win+U后门”、“隐藏、克隆账户”、“触发式后门”等……<br />
所以，你事后需要要全面检查下系统了，不要忘记检查杀毒软件的白名单，你懂的……<br />
进行这些操作，我本人推荐使用手工杀毒工具“PowerTool v4.2”、“XueTr v0.45”，在文章的最后我会写上官方下载地址。<br />
使用这两个软件要注意下，它们使用的驱动兼容性很差，有比较大的几率会造成系统蓝屏，所以如果您的机器不支持在线重启的话，您可要掂量好再用，希望他们以后的版本能改进下……<br />
说到驱动隐藏，最典型的现象就是系统盘及系统目录中存在以下文件：<br />
c:\Program Files\Easy File Locker<br />
c:\Program Files\Easy File Locker\FileLocker.exe<br />
c:\Program Files\Easy File Locker\uninst.exe<br />
c:\Documents and Settings\Administrator\桌面\Easy File Locker.lnk<br />
c:\Documents and Settings\Administrator\「开始」菜单\程序\Easy File Locker<br />
c:\Documents and Settings\Administrator\「开始」菜单\程序\Easy File Locker\Easy File Locker.lnk<br />
c:\Documents and Settings\Administrator\「开始」菜单\程序\Easy File Locker\Uninstall.lnk<br />
↑　以上文件十有八九已被攻击者删除（管理员想破脑袋，都不知道怎嘛回事），但以下文件是绝对存在的！　↓<br />
c:\WINDOWS\xlkfs.dat<br />
c:\WINDOWS\xlkfs.dll<br />
c:\WINDOWS\xlkfs.ini<br />
c:\WINDOWS\system32\drivers\xlkfs.sys<br />
该软件名字叫：Easy File Locker，一般用Easy File Locker 1.3，或着是其它版本，你可以搜一下，网上一堆……<br />
功能很简单，简单的驱动隐藏文件（简单的C、C++ 就可以实现，网上大量源码），支持单个文件或者整个目录。<br />
支持设置访问权限，属性为：可读/可访问（Accessible）、可写（Writable）、可删除（Deletable）、可见（Visible）<br />
一般做黑链的小朋友都会这样设置：只勾选可读，其他的一律拒绝……<br />
那么，会有这样的效果，该文件不会显示，不能通过列目录列出来，也不能删除，除非你知道完整路径，你才可以读取文件内容。<br />
这也是为什么各位管理员头疼的地方了，愣是找不到文件，但是直接访问网站却是可以执行的……<br />
╮(╯_╰)╭<br />
并且该软件还可以设置密码，启动、修改设置、卸载及重复安装的时候都需要密码，更蛋疼的是，主界面、卸载程序等都可以删除，只留下核心的驱动文件就行了……<br />
可以做到无进程、无启动项，无任何异常，因为只加载了一个驱动……<br />
这也是很多管理员想破头都不知道怎吗回事的原因……<br />
说完他的原理、特性，我们再讲讲清除它的方法（不管有没有密码）：<br />
首先设置系统“显示隐藏文件”，步骤如下：<br />
1、随意打开一个文件夹、磁盘<br />
2、在文件浏览窗口，依次点击：工具（顶部菜单）&#8211;&gt; 文件夹选项&#8211;&gt; 查看（顶部选项卡）<br />
3、依次勾选或点选，设置：隐藏受保护的操作系统文件（不勾选）、显示所有文件和文件夹（选中）、隐藏已知文件类型的扩展名（不勾选），然后点击确定按钮。<br />
提示，如果无法正常选中，例如复选框为灰色、不可操作、勾选无效等现象，说明对应的注册表项已被破坏，可以使用以下注册表代码进行修复：<br />
Windows Registry Editor Version 5.00<br />
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]<br />
&#8220;CheckedValue&#8221;=dword:00000001<br />
将以上代码保存为：Fix_Hide_File.Reg（修复隐藏文件），然后双击导入注册表即可。<br />
然后以文本方式可以打开：C:\WINDOWS\xlkfs.ini，这是“Easy File Locker”的配置文件，不出所料的话，你可以看到它的配置信息……<br />
（呵呵，也许会有朋友会问，如果他们连这个文件都隐藏了的话怎么办？很遗憾，该软件不支持隐藏自身的配置文件……）<br />
内容例如：<br />
[Common]<br />
Count=4<br />
[0]<br />
Path=C:\a.txt<br />
Type=0<br />
Access=14<br />
[1]<br />
Path=C:\b.txt<br />
Type=0<br />
Access=14<br />
[2]<br />
Path=C:\c.txt<br />
Type=0<br />
Access=14<br />
[3]<br />
Path=C:\d.txt<br />
Type=0<br />
Access=14<br />
文件、文件夹的路径、设置的权限等一览无余……<br />
注意！！这里记得要把这个文件复制一份单独留着，等会儿清理被隐藏文件的时候要用到！！切记！！！！<br />
然后删除上边所列的所有文件，尤其是系统目录中的那四个文件，如果无法删除可以考虑使用第三方工具强删，然后重启系统。<br />
系统启动后会提示：至少有一个服务或驱动程序无法加载或错误。<br />
这是由于我们删除了那个驱动文件，但是驱动加载项还在，所以会提示加载错误，不理即可。<br />
进入系统后，你会发现隐藏的文件全都回来了，那么，就简单多了，对照你先前备份的那个配置文件，挨个清理即可……<br />
（如果要彻底清除密码，只需要重装该软件，此时不会提示有密码，再卸载即可……）<br />
最后，再检查下杀毒软件白名单中的内容（参考上边的内容进行全面检查，上边说过不再重复），你懂的……<br />
最后再简单的说说黑帽SEO作弊的方法，方便广大站长清理对应的文件。<br />
一般都是劫持百度蜘蛛，很早之前，是在你网站单独放一个脚本文件，该脚本会远程调用攻击者的服务器数据，然后动态显示各种页面，也有少数是把数据库放在你网站，或者干脆生成静态的页面。<br />
然后在你网站的首页（或其他高权重网站）放置一个指向该文件的链接（隐藏的），然后下次蜘蛛抓取的时候，自然会爬向该文件，从而抓取一堆攻击者的预先防止 好的数据（通常是生成的垃圾文章堆砌关键词），如果你网站权重够高的话，那么这些关键词会排到较好的位置，从而给攻击者带来巨大的流量，以及很好的经济效 益……<br />
（权重：网站的权威性和重要性，相当于谷歌的PR值，是百度对网站评价的一个打分，网站权重越高，那么排名越高、收录越快、越多。）<br />
简单地说，就是在你的网站中生成了一个“小网站”，蜘蛛抓取后，自然会认为是你网站的内容，会按照你网站的权重给于相应的排名。<br />
当有人从百度或者其他搜索引擎点进来的时候，那些脚本会判断来路“Referer: http://www.baidu.com/”，或者直接跳转到攻击者的总页面，从而进行跳转或挂马操作。<br />
当给很多个高权重网站重复以上操作以后，带来的流量就相当可观了，相当于养了一个高权重站群！<br />
而一般政府（gov）、教育（edu）等机构的网站权重都比较高，这也是为什么各路人马都在喊：高价收购政府站、教育站。<br />
这种做法，大约是两三年前的做法，后来做的太疯狂了，百度进行了改版，修改了抓取算法。<br />
导致结果是，他们的数据依然是抓取的，但是会在半个月或者一个月后才放出来快照，然后才给于排名，这大大的影响了黑帽SEO行业，于是新的做法出现了：全局劫持！<br />
什么叫全局劫持？由于百度短时间内不会收录突然冒出来的新链接，所以小黑客们就想到了新的招数：利用网站原有页面进行作弊……<br />
So，邪恶的东西来了：Global.asa、Global.asax，实际上这个方法在很多年前挂马的时候就应用到了。<br />
这两个文件是Asp 和Aspx 独有的特殊文件，作用是在每次执行一个动态脚本的时候，都会先加载该脚本，然后再执行目标脚本。<br />
（该文件还可以进行简单的文件锁定，因为每次都先执行嘛，所以可以每次都判断一次某个文件状态，然后进行某些操作，和上边的循环监视锁定的效果是一样的。）<br />
（实际上不一定非要写这俩文件，例如：conn.asp、conn.php 等被大量脚本包含的通用文件都可以，效果是一样的，而且比这个隐蔽多了……）<br />
关于这个文件具体的细节就不说了，不然又是个长篇大论，想了解的可以去搜搜，或者参考：http://baike.baidu.com/view/673542.htm<br />
所以效果就来了，既然执行每个脚本的时候都会先执行该文件，小黑客们就想到了劫持蜘蛛的方法，在Global.asa 中写判断用户系统信息的代码（User-Agent: Mozilla/5.0），然后判断是否是蜘蛛、来路是什么等信息……<br />
如果是蜘蛛来访，那么就会输出SEO作弊用的关键词，否则就显示正常页面，如果你网站更新频率很高的话，那么几乎是刚挂上关键词就收录了，就来量了，很快。<br />
如果用户来路信息为搜索引擎，那么就跳转到攻击者的页面，否则显示正常页面。<br />
最后造成的影响就是，例如百度：site:lcx.cc，所有原有页面快照都变成了攻击者的关键词（最典型的就是首页了，因为首页快照更新周期短、频率高，而且权重高），然后你点进去就会跳转到另外一个页面（攻击者挂马的页面）……<br />
如果你不是从百度等搜索引擎点进去的，而是直接访问该网站，那是不会有任何异常现象的，所以该方法比较隐蔽……<br />
前几个月新闻媒体疯狂报道的“某某政府网站快照是色情网站、六合彩”等新闻，就是因为这样……<br />
而该方法有个很严重的后果，刚开始SEO作弊带来的访问量很大，然后快照越来越少，最后被K光了，对被挂的网站影响很大，基本是毁了……<br />
如今的SEO作弊方法略有改进，但万变不离其中，高权重网站是必不可少的，修改你网站文件、劫持百度蜘蛛是必不可少的，这里只是略提一下，实际上要复杂得多……<br />
这篇文章基本上算是写完了，各位站长、管理员知道了原理，就可以对症下药了……<br />
最后提供各种提到的软件下载：<br />
（以下地址均为官方网站，可放心下载！）<br />
XueTr v0.45：http://www.xuetr.com/、http://t.qq.com/linxer<br />
PowerTool v4.2：http://hi.baidu.com/ithurricane/blog、http://t.qq.com/powertool<br />
Easy File Locker 1.3：http://www.xoslab.com/</p>
<p>作者Nuclear&#8217;Atk 网络安全研究中心</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/net/shell-caozuo.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用Nginx实现反向代理设置</title>
		<link>http://www.xianren.org/web/nginx-daili.htm</link>
		<comments>http://www.xianren.org/web/nginx-daili.htm#comments</comments>
		<pubDate>Sat, 05 May 2012 17:37:29 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网站建设]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[代理]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=43</guid>
		<description><![CDATA[在说反向代理之前先说说关于代理技术 1代理服务器 代理服务器（Proxy Server）的功能是代理网络用户去取得网络信息。代理服务器是介于浏览器和Web服务器之间的一台服务器，浏览器不是直接到Web服务器去取回网页而 是向代理服务器发出请求，请求会先送到代理服务器，由代理服务器取回所需的信息并传回浏览器。假设A为代理服务器，B为web服务器，我们访问的是A服务 器，然后由A服务器向B服务器发出请求，然后B服务器将请求送回A服务器，A服务器再将所需信息传回浏览器，这样可以隐藏真实的web服务器，对安全有一 定的保证。 2.正向代理 正向代理是一个位于客户端和源服务器（origin server）之间的服务器。为了从源服务器取得所需内容，客户端向代理发送一个请求并指定目标（源服务器），然后代理向原服务器转交请求并将获得的内容 返回给客户端。正向代理的典型应用时为在防火墙内的局域网客户端提供访问Internet的途径。 3.反向代理 反向代理与正向代理相反，对于客户端而言，它（代理服务器）就像源服务器，客户端向反向代理的命名空间（name-space）中的内容发送普通请 求，接着反向代理判断向何处（源服务器）转交请求，并将获得的内容返回给客户端，就像这些内容原本就是它（代理服务器）自己的一样。 反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台web服务器提供负载均衡。另外，它还可以 启动高级URL策略和管理技术，从而使多个web服务器访问相同的URL空间（reverse proxies can be used simply to bring several servers into the same URL space）。 设置的详细过程如下： 这里我采用dl.xianren.org为我要实现反向代理的域名。 首先，我们需要将dl.xianren.org解析到我们国外或者其他地区的服务器上的IP地址； 然后，修改nginx配置文件nginx.conf，如果你的nginx编译时未配置配置文件的路径，默认在/usr/local/nginx/conf/nginx.conf，使用vi打开，或者下载到本地进行修改。然后添加如下一段代码到nginx中 server    { listen          80; server_name     dl.xianren.org;  //注意将这里修改为你要反向代理的域名； location / { proxy_pass              http://128.21.*.*/; //这里可以修改为你要反向代理的域名或者IP地址，注意带http://和/； proxy_redirect          off; proxy_set_header        X-Real-IP       $remote_addr; proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; [...]]]></description>
			<content:encoded><![CDATA[<p>在说反向代理之前先说说关于代理技术</p>
<p>1代理服务器<br />
代理服务器（Proxy Server）的功能是代理网络用户去取得网络信息。代理服务器是介于浏览器和Web服务器之间的一台服务器，浏览器不是直接到Web服务器去取回网页而 是向代理服务器发出请求，请求会先送到代理服务器，由代理服务器取回所需的信息并传回浏览器。假设A为代理服务器，B为web服务器，我们访问的是A服务 器，然后由A服务器向B服务器发出请求，然后B服务器将请求送回A服务器，A服务器再将所需信息传回浏览器，这样可以隐藏真实的web服务器，对安全有一 定的保证。</p>
<p>2.正向代理<br />
正向代理是一个位于客户端和源服务器（origin server）之间的服务器。为了从源服务器取得所需内容，客户端向代理发送一个请求并指定目标（源服务器），然后代理向原服务器转交请求并将获得的内容 返回给客户端。正向代理的典型应用时为在防火墙内的局域网客户端提供访问Internet的途径。<span id="more-43"></span></p>
<p>3.反向代理<br />
反向代理与正向代理相反，对于客户端而言，它（代理服务器）就像源服务器，客户端向反向代理的命名空间（name-space）中的内容发送普通请 求，接着反向代理判断向何处（源服务器）转交请求，并将获得的内容返回给客户端，就像这些内容原本就是它（代理服务器）自己的一样。</p>
<p>反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台web服务器提供负载均衡。另外，它还可以 启动高级URL策略和管理技术，从而使多个web服务器访问相同的URL空间（reverse proxies can be used simply to bring several servers into the same URL space）。</p>
<p>设置的详细过程如下：</p>
<p>这里我采用dl.xianren.org为我要实现反向代理的域名。<br />
首先，我们需要将dl.xianren.org解析到我们国外或者其他地区的服务器上的IP地址；<br />
然后，修改nginx配置文件nginx.conf，如果你的nginx编译时未配置配置文件的路径，默认在/usr/local/nginx/conf/nginx.conf，使用vi打开，或者下载到本地进行修改。然后添加如下一段代码到nginx中</p>
<pre>
server    {
listen          80;
server_name     dl.xianren.org;  //注意将这里修改为你要反向代理的域名；
location / {
proxy_pass              http://128.21.*.*/; //这里可以修改为你要反向代理的域名或者IP地址，注意带http://和/；
proxy_redirect          off;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
</pre>
<p>我的经验是插入到server_name为localhost这个域之前，否则是无法成功的。添加保存之后。<br />
然后执行：/usr/local/nginx/sbin/nginx -t 检查配置是否正常<br />
如果正常则出现：<br />
#the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok<br />
configuration file /usr/local/nginx/conf/nginx.conf test is successful<br />
否则按错误提示修改配置，错误提示会精确到哪一行的。检查修改即可。</p>
<p>最后，执行如下命令使得配置生效。<br />
kill -HUP ’cat /usr/local/nginx/logs/nginx.pid’<br />
这样，如果域名也解析生效的话，应该就可以通过域名来访问到我们反向代理的地址。<br />
关于反向代理还有很多用途，以后会经常钻研一下！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/web/nginx-daili.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>网页木马收集</title>
		<link>http://www.xianren.org/net/web-muma.htm</link>
		<comments>http://www.xianren.org/net/web-muma.htm#comments</comments>
		<pubDate>Sat, 05 May 2012 04:24:00 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网络安全]]></category>
		<category><![CDATA[UDP]]></category>
		<category><![CDATA[木马]]></category>
		<category><![CDATA[维护]]></category>
		<category><![CDATA[网页]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=41</guid>
		<description><![CDATA[今天在维护服务器时发现一被黑，检查发现一堆网页木马，对外UDP攻击带宽可以达到1.5G左右，真是厉害，木马已经打包传至闲人的网盘（http://xianren-org.cccpan.com/）有需要研究的可以下载，其中包括一些一句话木马等，解压密码为本站域名，提醒一下，严禁使用此网盘中的任何工具去攻击别人，谢谢。]]></description>
			<content:encoded><![CDATA[<p>今天在维护服务器时发现一被黑，检查发现一堆网页木马，对外UDP攻击带宽可以达到1.5G左右，真是厉害，木马已经打包传至闲人的网盘（<a title="http://xianren-org.cccpan.com/" href="http://xianren-org.cccpan.com/" target="_blank">http://xianren-org.cccpan.com/</a>）有需要研究的可以下载，其中包括一些一句话木马等，解压密码为本站域名，<span style="color: #ff0000;">提醒一下，严禁使用此网盘中的任何工具去攻击别人，谢谢。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/net/web-muma.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下防御/减轻DDOS攻击</title>
		<link>http://www.xianren.org/net/linux-ddos.htm</link>
		<comments>http://www.xianren.org/net/linux-ddos.htm#comments</comments>
		<pubDate>Fri, 04 May 2012 08:58:47 +0000</pubDate>
		<dc:creator>闲人</dc:creator>
				<category><![CDATA[网络安全]]></category>
		<category><![CDATA[DDOS]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[攻击]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.xianren.org/?p=40</guid>
		<description><![CDATA[前言 互联网如同现实社会一样充满钩心斗角，网站被DDOS也成为站长最头疼的事。在没有硬防的情况下，寻找软件代替是最直接的方法，比如用 iptables，但是iptables不能在自动屏蔽，只能手动屏蔽。今天要说的就是一款能够自动屏蔽DDOS攻击者IP的软件：DDoS deflate。 DDoS deflate介绍 DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址，在检测到某个结点超过预设的限 制时，该程序会通过APF或IPTABLES禁止或阻挡这些IP. DDoS deflate官方网站：http://deflate.medialayer.com/ 如何确认是否受到DDOS攻击？ 执行： netstat -ntu &#124; awk '{print $5}' &#124; cut -d: -f1 &#124; sort &#124; uniq -c &#124; sort -n 执行后，将会显示服务器上所有的每个IP多少个连接数。 以下是我自己用VPS测试的结果： li88-99:~# netstat -ntu &#124; awk '{print $5}' &#124; cut -d: -f1 &#124; sort &#124; uniq -c &#124; sort -n 1 114.226.9.132 1 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>前言</strong></p>
<p>互联网如同现实社会一样充满钩心斗角，网站被DDOS也成为站长最头疼的事。在没有硬防的情况下，寻找软件代替是最直接的方法，比如用 iptables，但是iptables不能在自动屏蔽，只能手动屏蔽。今天要说的就是一款能够自动屏蔽DDOS攻击者IP的软件：DDoS deflate。</p>
<p><strong>DDoS deflate介绍</strong></p>
<p>DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址，在检测到某个结点超过预设的限 制时，该程序会通过APF或IPTABLES禁止或阻挡这些IP.</p>
<p>DDoS deflate官方网站：http://deflate.medialayer.com/</p>
<p><strong>如何确认是否受到DDOS攻击？<span id="more-40"></span></strong></p>
<p>执行：</p>
<pre>netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n</pre>
<p>执行后，将会显示服务器上所有的每个IP多少个连接数。</p>
<p>以下是我自己用VPS测试的结果：</p>
<pre>li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.132
1 174.129.237.157
1 58.60.118.142
1 Address
1 servers)
2 118.26.131.78
3 123.125.1.202
3 220.248.43.119
4 117.36.231.253
4 119.162.46.124
6 219.140.232.128
8 220.181.61.31    VPS侦探 http://www.vpser.net/
2311 67.215.242.196</pre>
<p>每个IP几个、十几个或几十个连接数都还算比较正常，如果像上面成百上千肯定就不正常了。</p>
<p><strong>1、安装DDoS deflate</strong></p>
<pre>wget http://www.inetbase.com/scripts/ddos/install.sh   //下载DDoS  deflate
chmod 0700 install.sh    //添加权限
./install.sh             //执行</pre>
<p><strong>2、配置DDoS deflate</strong></p>
<p>下面是DDoS deflate的默认配置位于/usr/local/ddos/ddos.conf ，内容如下：</p>
<pre>##### Paths of the script and other files
PROGDIR="/usr/local/ddos"
PROG="/usr/local/ddos/ddos.sh"
IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"  //IP地址白名单
CRON="/etc/cron.d/ddos.cron"    //定时执行程序
APF="/etc/apf/apf"
IPT="/sbin/iptables"

##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with --cron
#####          option so that the new frequency takes effect
FREQ=1   //检查时间间隔，默认1分钟

##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150     //最大连接数，超过这个数IP就会被屏蔽，一般默认即可

##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=1        //使用APF还是iptables。推荐使用iptables,将APF_BAN的值改为0即可。

##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1   //是否屏蔽IP，默认即可

##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO="root"   //当IP被屏蔽时给指定邮箱发送邮件，推荐使用，换成自己的邮箱即可

##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600    //禁用IP时间，默认600秒，可根据情况调整</pre>
<p>用户可根据给默认配置文件加上的注释提示内容，修改配置文件。</p>
<p>查看/usr/local/ddos/ddos.sh文件的第117行</p>
<blockquote><p>netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr &gt; $BAD_IP_LIST</p></blockquote>
<p>修改为以下代码即可！</p>
<blockquote><p>netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sed -n ‘/[0-9]/p’ | sort | uniq -c | sort -nr &gt; $BAD_IP_LIST</p></blockquote>
<p>喜欢折腾的可以用Web压力测试软件测试一下效果，相信DDoS deflate还是能给你的VPS或服务器抵御一部分DDOS攻击，给你的网站更多的保护。</p>
<p><strong>&gt;&gt;转载请注明出处：VPS侦探 本文链接地址：http://www.vpser.net/security/ddos-deflate.html</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xianren.org/net/linux-ddos.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

