<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践Ok]suse enterprise10在安装nc6后，利用shell命令操作Memcached，利用nc来进行路由洗沟测试，对网路连接性进行评估。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 02 Dec 2008 07:06:29 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<textarea name="code" class="php" rows="15" cols="100">
CentOS7下的nc 成功无返回，原因是没有-v，加上就有了：
for i in &#123;1..200&#125;; do nc -z -n -w 1 -v&nbsp;&nbsp;123.57.232.131 23;done
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.50 ( https://nmap.org/ncat )

MacBook下面不加-v一样有输出是succeeded:
for i in &#123;1..200&#125;; do nc -z -n -w 1 -v 123.57.232.131 23;done
Connection to 123.57.232.131 port 23 [tcp/*] succeeded!
Connection to 123.57.232.131 port 23 [tcp/*] succeeded!
</textarea><br/><br/>背景：为何要用nc,nc比telnet相对有优势一点，可以作探测之用,hack常用工具，特别是有时路由抽风(为嘛抽风？技术中心基础运维的事儿，走专线，路由没配置好，或是专线满了没有人管，于是队列日志一堆一堆的全是失败信息，满了，磁盘也满了，这是业务问题？)，北京到XX有两条路由，一条走专线，一条走VPN,我们这里回指的路由是从专线走的,之前你们的服务器应该也是走的专线，可能你们修改了服务器以后，他有时候匹配到了专线的路由，有时候匹配到了VPN的路由，造成丢包，看看你们那边是不是绑定策略能从专线过来？这种问题怎么从应用层来排查到是网路抽风呢？用netcat加循环设置看现象卡不卡了，无其它办法，如基础运维说没问题，我们也就蔫了，呵呵。<br/>——————————————————————————————————————————————————————————<br/>netcat简称：<br/>[root@localhost ~]# type -a nc<br/>nc is /usr/bin/nc<br/>$ nc -w 10 localhost 2389<br/>该连接将在 10 秒后中断。<br/>注意: 不要在服务器端同时使用 -w 和 -l 参数，因为 -w 参数将在服务器端无效果。<br/>一、循环连接多次：<br/><textarea name="code" class="C" rows="15" cols="100">
for i in `seq 1 20`;do nc -z 10.78.72.108 61611;done
</textarea><br/>实践如下：<br/><textarea name="code" class="php" rows="15" cols="100">
 for i in `seq 1 50`;do nc -z&nbsp;&nbsp;10.78.72.*9* 61611;done&nbsp;&nbsp; 
Connection to 10.78.72.*** 61611 port [tcp/*] succeeded!
Connection to 10.78.72.*** 61611 port [tcp/*] succeeded!
Connection to 10.78.72.*** 61611 port [tcp/*] succeeded!
Connection to 10.78.72.*** 61611 port [tcp/*] succeeded!
Connection to 10.78.72.*** 61611 port [tcp/*] succeeded!
</textarea><br/><br/>二、有时候设置值设置不进去，设置一下值：<br/><textarea name="code" class="php" rows="15" cols="100">
[root@localhost htdocs]# nc -C 10.78.72.*** 61611
set pyw 1 0 3
100
STORED
</textarea><br/><br/>三、一行shell解决设置memcacheq的键值存起来，方便第一里面的循环：<br/><textarea name="code" class="php" rows="15" cols="100">
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611&nbsp;&nbsp;
STORED
</textarea><br/><br/>四、保存为shell如，a.sh，循环设置测试：<br/><textarea name="code" class="php" rows="15" cols="100">
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611
printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.*** 61611
</textarea><br/><br/>上面这样得用vi去复制粘贴多行，于是有下面的简单一行实现循环的语句：<br/><textarea name="code" class="C" rows="15" cols="100">
[root@emulMachine htdocs]# printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.108 61611
STORED
[root@emulMachine htdocs]#&nbsp;&nbsp;for i in `seq 1 20`;do printf &quot;set jackxiang 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc&nbsp;&nbsp;10.78.72.108 61611;done
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
STORED
</textarea><br/>来自：http://www.2cto.com/os/201401/272319.html<br/><br/><br/>近来发现nc可以，而用原生的telnet超时卡顿不行，难道它们的协议不一样？？？还是有防火墙对telnet作了限定？<br/>Add：2014-08-15<br/>printf &quot;set name 0 0 9&#92;r&#92;njackxiang&#92;r&#92;n&quot; &#124; nc 10.78.78.*** 61611<br/>STORED<br/><br/>nc6安装篇：<br/>打开suse enterprise 10的企业版光盘A，到suse/i586/nc6-0.5-13.2.i586.rpm&nbsp;&nbsp;<br/><br/><div class="code">#rpm -ihv nc6-0.5-13.2.i586.rpm&nbsp;&nbsp;<br/>#rpm -ql&nbsp;&nbsp;nc6-0.5-13.2.i586.rpm&nbsp;&nbsp;</div><br/>bogon:/home/jackxiang # rpm -ql nc6-0.5-13.2<br/>/usr/bin/nc6<br/>/usr/share/doc/packages/nc6<br/>/usr/share/doc/packages/nc6/AUTHORS<br/>/usr/share/doc/packages/nc6/COPYING<br/>/usr/share/doc/packages/nc6/NEWS<br/>/usr/share/doc/packages/nc6/README<br/>/usr/share/doc/packages/nc6/TODO<br/>/usr/share/locale/it/LC_MESSAGES/nc6.mo<br/>/usr/share/man/man1/nc6.1.gz<br/><br/><br/>/usr/bin/nc6&nbsp;&nbsp;<br/>nc6，不叫nc了，当然可以做软连接：ln -s nc6 nc,也可以直接用nc6：<br/><br/><div class="code">bogon:/home/jackxiang # nc<br/>nc6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncopy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncplogin&nbsp;&nbsp; ncpmap&nbsp;&nbsp;&nbsp;&nbsp; ncpmount&nbsp;&nbsp; ncpumount</div><br/>NC说完了，下面用nc操作memcache。。。<br/><br/>/usr/local/sinasrv2/bin/memcached -d -m 10 -u root&nbsp;&nbsp;-p 11211 -c 256 -P /tmp/memcached.pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 启动memcache<br/><br/><br/><div class="code">redhat rpm：<br/>http://fr.rpmfind.net/linux/rpm2html/search.php?query=nc</div>　　首先，需要了解Memcached协议，如果不清楚可参考《Memcached 协议中英文对照》。<br/><br/>　　1、数据存储（假设key为zhangyan，value为12345）<br/><br/><div class="code">printf &quot;set zhangyan 0 0 5&#92;r&#92;n12345&#92;r&#92;n&quot; &#124; nc 127.0.0.1 11211</div>　STORED<br/><br/>　　2、数据取回（假设key为zhangyan）<br/><br/><div class="code">printf &quot;get zhangyan&#92;r&#92;n&quot; &#124; nc 127.0.0.1 11211</div>　VALUE zhangyan 0 5<br/>　12345<br/>　END<br/><br/>　　3、数值增加1（假设key为zhangyan，并且value为正整数）<br/><br/><div class="code">printf &quot;incr zhangyan 1&#92;r&#92;n&quot; &#124; nc 127.0.0.1 11211</div>　12346<br/><br/>　　4、数值减少3（假设key为zhangyan，并且value为正整数）<br/><br/><div class="code">printf &quot;decr zhangyan 3&#92;r&#92;n&quot; &#124; nc 127.0.0.1 11211</div>　12343<br/><br/>　　5、数据删除（假设key为zhangyan）<br/><br/><div class="code">printf &quot;delete zhangyan&#92;r&#92;n&quot; &#124; nc 127.0.0.1 11211</div>　DELETED<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清空memcache：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><div class="code">echo &quot;flush_all&quot; &#124; nc localhost 11211</div><br/>　　6、查看Memcached状态<br/><br/><div class="code">printf &quot;stats&#92;r&#92;n&quot; &#124; nc 127.0.0.1 11211</div>　STAT pid 3025<br/>　STAT uptime 4120500<br/>　STAT time 1228021767<br/>　STAT version 1.2.6<br/>　STAT pointer_size 32<br/>　STAT rusage_user 433.463103<br/>　STAT rusage_system 1224.515845<br/>　STAT curr_items 1132460<br/>　STAT total_items 8980260<br/>　STAT bytes 1895325386<br/>　STAT curr_connections 252<br/>　STAT total_connections 547850<br/>　STAT connection_structures 1189<br/>　STAT cmd_get 13619685<br/>　STAT cmd_set 8980260<br/>　STAT get_hits 6851607<br/>　STAT get_misses 6768078<br/>　STAT evictions 0<br/>　STAT bytes_read 160396238246<br/>　STAT bytes_written 260080686529<br/>　STAT limit_maxbytes 2147483648<br/>　STAT threads 1<br/>　END<br/><br/>　　7、模拟top命令，查看Memcached状态：<br/><br/><div class="code">watch &quot;printf &#039;stats&#92;r&#92;n&#039; &#124; nc 127.0.0.1 11211&quot;</div><br/><br/>　　或者<br/><br/><div class="code">watch &quot;echo stats &#124; nc 127.0.0.1 11211&quot;</div><br/><br/>推荐一篇文章：http://www.ooso.net/index.php/archives/444<br/>memcache遭遇out of memory错误： 关于memcache内存分配的介绍， 很适合了解！<br/><br/>[root@slave1 bin]# telnet localhost 11211<br/>Trying 127.0.0.1…<br/>Connected to localhost (127.0.0.1).<br/>Escape character is ‘^]’.<br/>set key1 0 0 2<br/>SERVER_ERROR out of memory<br/><br/>&#92;n的问题：<br/>我是经常使用nc来查看mc的状态的，突然有一天，我使用nc命令做set操作，发现总是失败；用telnet没有问题，至少应该不是memcached的问题，可能是nc的问题吧。<br/><br/>今天又遇到了这个问题，我使用tcpdump观察使用nc和使用telnet的差别，发现nc发送的回车为&#92;n ，而telnet发送的回车符为&#92;r&#92;n，差异就这么多了，于是使用下列命令测试：<br/><br/>echo -e &quot;set a 0 0 1&#92;r&#92;na&#92;r&#92;nquit&#92;r&#92;n&quot;&#124;nc host port<br/>结果成功<br/><br/>echo -e &quot;set a 0 0 1&#92;na&#92;nquit&#92;n&quot;&#124;nc host port<br/>结果失败<br/><br/>比较久可以知道问题是出现在回车符上了，至于memcached是怎么解释的，有时间在了解一下源码吧
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践Ok]suse enterprise10在安装nc6后，利用shell命令操作Memcached，利用nc来进行路由洗沟测试，对网路连接性进行评估。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>