<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[忆风居]]></title> 
<link>http://yfyfj.cn/index.php</link> 
<description><![CDATA[忆风的地盘，一些日常的记忆，技术文摘，以及收集的一些文章。]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[忆风居]]></copyright>
<item>
<link>http://yfyfj.cn/post/mrtg-in-windows-setup.php</link>
<title><![CDATA[MRTG WINDOWS 配置方法(转)]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Fri, 18 Jun 2010 08:17:14 +0000</pubDate> 
<guid>http://yfyfj.cn/post/mrtg-in-windows-setup.php</guid> 
<description>
<![CDATA[ 
	<p>Mrtg (Multi Router Traffic Grapher,MRTG) 是一个监控<a href="http://www.020u.com/" target="_blank"><span style="color: #111133; font-size: x-small">网络</span></a>链路流量负载的工具软件，它可以从所有运行SNMP协议的设备(包括服务器、路由器、交换机等)抓取到信息，并自动生成包含PNG格式的图形以HTML文档方式显示给用户。</p><p>　　首先，要在IIS中配置一个Web站点，用于发布MRTG的监控信息，本文假设该站点的根目录为c:/mrtg,然后，获取MRTG的 Win32版本和Activeperl,分别安装到d:/mrtg/和c:/usr/,为了将MRTG作为系统服务一开机就自动运行，我们还将 Windows 2000 Resource Kit 中的instsrv.exe和srvany.exe复制到d:/mrtg/bin</p><p>官方网站:<a href="http://people.ee.ethz.ch/~oetiker/webtools/mrtg/" target="_blank">http://people.ee.ethz.ch/~oetiker/webtools/mrtg/</a></p><p>　　Windows 2000 Server中内含了SNMP <a href="http://www.020u.com/" target="_blank"><span style="color: #111133; font-size: x-small">网络</span></a>管理协议，如果你想通过 MRTG 来监控一台Windows 2000服务器的相关信息，就需要启用该Windows 2000 Server 的SNMP 协议.</p><p>　　系统默认的Community 是通用的Public,虽然只有只读权限，但是出于安全的考虑，最好修改一下。</p><p>　　SNMP使用的是UDP协议 161/162 端口</p><p>　　可网管交换机，路由器本来就有SNMP协议，不需添加</p><p>　　假设我们要监控的设备的IP是202.108.36.172</p><p>　　下面我们进行MRTG的配置：<br />　　1.进入 d:/mrtg/bin 目录：<br />　　cd d:/mrtg/bin</p><p>　　执行 cfgmaker,生成cfg文件：</p><p>　　perl cfgmaker <a href="mailto:public@202.108.36.172"><span style="color: #111133; font-size: x-small">public@202.108.36.172</span></a> --global &quot;WorkDir: c:/mrtg&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --output mrtg.cfg</p><p>　　这里的public是202.108.36.172的Community,MRTG的监控文件保存在C:/mrtg/,注意WorkDir:与 c:/mrtg中间必需要有空格，输入的配置文件为mrtg.cfg,如果有多台设备要监控，可以在这里分别填入，如：</p><p>　　perl cfgmaker <a href="mailto:public@202.108.36.172"><span style="color: #111133; font-size: x-small">public@202.108.36.172</span></a> <a href="mailto:public@202.108.36.173"><span style="color: #111133; font-size: x-small">public@202.108.36.173</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --global &quot;WorkDir: c:/mrtg&quot; --output mrtg.cfg</p><p><br />　　2.为了让MRTG全天24小时监控，我们在mrtg.cfg中加入以下参数，使MRTG每隔5分钟采集一次数据。</p><p>　　RunAsDaemon:yes<br />　　Interval:5<br />　　可以使用命令：<br />　　echo RunAsDaemon:yes &gt;&gt;mrtg.cfg<br />　　echo Interval:5 &gt;&gt;mrtg.cfg<br />　　使用中文：<br />　　echo language:chinese&gt;&gt;mrtg.cfg</p><p>　　3.使用IndexMaker生成报表首页:<br />　　perl indexmaker mrtg.cfg&gt;c:/mrtg/index.htm<br />　　4.运行MRTG:<br />　　perl mrtg --logging=mrtg.log mrtg.cfg<br />　　访问<a href="http://yourserver/index.htm"><span style="color: #111133; font-size: x-small"><a href="http://yourserver/index.htm" target="_blank">http://yourserver/index.htm</a></span></a> 看MRTG是否可以正常工作，生成统计图形。如果正常，终止程序，将其配置为系统服务。</p><p>　　将MRTG配置为系统服务：<br />　　由于MRTG需要由perl来编译执行，不能直接添加为系统服务，所以我们使用Windows 2000 Resource Kit 中的instsrv.exe和srvany.exe这</p><p>　　两个程序来帮助我们把MRTG添加为系统服务。</p><p>　　1 添加srvany.exe为服务：<br />　　instsrv MRTG &quot;d:/mrtg/bin/srvany.exe&quot;</p><p>　　2 配置srvany:</p><p>　　在注册表 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlset/servicesMRTG 中添加一个 parameters 子键。再在 parameters 子键中添加以下项目：<br />　　Application的字串值，内容为 C:/usr/bin/perl.exe<br />　　AppDirectory 的字串值，内容为d:/mrtg/bin/<br />　　AppParameters的字串值,内容为 mrtg --logging=mrtg.log mrtg.cfg</p><p>　　有用的参数</p><p>　　Options[_]: growright, bits<br />　　RunAsDaemon:yes<br />　　Interval:5<br />　　language:chinese</p><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/mrtg/" rel="tag">mrtg</a> , <a href="http://yfyfj.cn/go.php/tags/windows/" rel="tag">windows</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/post/windows2003-snmp-cpu-load-oid.php</link>
<title><![CDATA[Windows 2003 SNMP CPU load OID]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Fri, 18 Jun 2010 08:06:03 +0000</pubDate> 
<guid>http://yfyfj.cn/post/windows2003-snmp-cpu-load-oid.php</guid> 
<description>
<![CDATA[ 
	Target[CPU]:1.3.6.1.2.1.25.3.3.1.2.1&amp;1.3.6.1.2.1.25.3.3.1.2.2:public@172.16.20.11<br />MaxBytes[CPU]:100<br />Options[CPU]:gauge,unknaszero<br />WithPeak[CPU]:wmy<br />YLegend[CPU]:%utilization<br />ShortLegend[CPU]:%<br />Legend1[CPU]:Proc Load in next minute<br />Legend2[CPU]:<br />Legend3[CPU]:Maximal 5 minute Proc Load<br />Legend4[CPU]:<br />LegendI[CPU]:负荷1:<br />LegendO[CPU]:负荷2:<br />Title[CPU]:CPU 负荷<br />PageTop[CPU]:CPU负荷<br/>Tags - <a href="http://yfyfj.cn/go.php/tags/windows2003/" rel="tag">windows2003</a> , <a href="http://yfyfj.cn/go.php/tags/snmp/" rel="tag">snmp</a> , <a href="http://yfyfj.cn/go.php/tags/cpu/" rel="tag">cpu</a> , <a href="http://yfyfj.cn/go.php/tags/load/" rel="tag">load</a> , <a href="http://yfyfj.cn/go.php/tags/oid/" rel="tag">oid</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/post/HTTP_Status_Code_Detail.php</link>
<title><![CDATA[HTTP状态码, HTTP Status Code]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Tue, 20 Apr 2010 03:02:13 +0000</pubDate> 
<guid>http://yfyfj.cn/post/HTTP_Status_Code_Detail.php</guid> 
<description>
<![CDATA[ 
	<div style="margin-bottom: 10px; color: green; font-size: 14px; font-weight: bold">常常抓包， 会看到HTTP头的一些参数。 这次我们先了解一下HTTP状态码的情况.<br /><br /><br />HTTP状态码（HTTP Status Code）</div><p><br />一些常见的状态码为：</p><p><strong>200</strong> - 服务器成功返回网页 <br /><strong>404</strong> - 请求的网页不存在 <br /><strong>503</strong> - 服务不可用 <br /><br />详细分解：</p><p>1xx（临时响应）<br />表示临时响应并需要请求者继续执行操作的状态代码。</p><p>代码&nbsp;&nbsp; 说明 <br />100&nbsp;&nbsp; （继续） 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分，正在等待其余部分。&nbsp; <br />101&nbsp;&nbsp; （切换协议） 请求者已要求服务器切换协议，服务器已确认并准备切换。 </p><p>2xx （成功）<br />表示成功处理了请求的状态代码。</p><p>代码&nbsp;&nbsp; 说明 <br />200&nbsp;&nbsp; （成功）&nbsp; 服务器已成功处理了请求。 通常，这表示服务器提供了请求的网页。 <br />201&nbsp;&nbsp; （已创建）&nbsp; 请求成功并且服务器创建了新的资源。 <br />202&nbsp;&nbsp; （已接受）&nbsp; 服务器已接受请求，但尚未处理。 <br />203&nbsp;&nbsp; （非授权信息）&nbsp; 服务器已成功处理了请求，但返回的信息可能来自另一来源。 <br />204&nbsp;&nbsp; （无内容）&nbsp; 服务器成功处理了请求，但没有返回任何内容。 <br />205&nbsp;&nbsp; （重置内容） 服务器成功处理了请求，但没有返回任何内容。<br />206&nbsp;&nbsp; （部分内容）&nbsp; 服务器成功处理了部分 GET 请求。 </p><p>3xx （重定向） <br />表示要完成请求，需要进一步操作。 通常，这些状态代码用来重定向。</p><p>代码&nbsp;&nbsp; 说明 <br />300&nbsp;&nbsp; （多种选择）&nbsp; 针对请求，服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作，或提供操作列表供请求者选择。 <br />301&nbsp;&nbsp; （永久移动）&nbsp; 请求的网页已永久移动到新位置。 服务器返回此响应（对 GET 或 HEAD 请求的响应）时，会自动将请求者转到新位置。<br />302&nbsp;&nbsp; （临时移动）&nbsp; 服务器目前从不同位置的网页响应请求，但请求者应继续使用原有位置来进行以后的请求。<br />303&nbsp;&nbsp; （查看其他位置） 请求者应当对不同的位置使用单独的 GET 请求来检索响应时，服务器返回此代码。<br />304&nbsp;&nbsp; （未修改） 自从上次请求后，请求的网页未修改过。 服务器返回此响应时，不会返回网页内容。 <br />305&nbsp;&nbsp; （使用代理） 请求者只能使用代理访问请求的网页。 如果服务器返回此响应，还表示请求者应使用代理。 <br />307&nbsp;&nbsp; （临时重定向）&nbsp; 服务器目前从不同位置的网页响应请求，但请求者应继续使用原有位置来进行以后的请求。 </p><p>4xx（请求错误） <br />这些状态代码表示请求可能出错，妨碍了服务器的处理。</p><p>代码&nbsp;&nbsp; 说明 <br />400&nbsp;&nbsp; （错误请求） 服务器不理解请求的语法。 <br />401&nbsp;&nbsp; （未授权） 请求要求身份验证。 对于需要登录的网页，服务器可能返回此响应。 <br />403&nbsp;&nbsp; （禁止） 服务器拒绝请求。<br />404&nbsp;&nbsp; （未找到） 服务器找不到请求的网页。<br />405&nbsp;&nbsp; （方法禁用） 禁用请求中指定的方法。 <br />406&nbsp;&nbsp; （不接受） 无法使用请求的内容特性响应请求的网页。 <br />407&nbsp;&nbsp; （需要代理授权） 此状态代码与 401（未授权）类似，但指定请求者应当授权使用代理。<br />408&nbsp;&nbsp; （请求超时）&nbsp; 服务器等候请求时发生超时。 <br />409&nbsp;&nbsp; （冲突）&nbsp; 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 <br />410&nbsp;&nbsp; （已删除）&nbsp; 如果请求的资源已永久删除，服务器就会返回此响应。 <br />411&nbsp;&nbsp; （需要有效长度） 服务器不接受不含有效内容长度标头字段的请求。 <br />412&nbsp;&nbsp; （未满足前提条件） 服务器未满足请求者在请求中设置的其中一个前提条件。 <br />413&nbsp;&nbsp; （请求实体过大） 服务器无法处理请求，因为请求实体过大，超出服务器的处理能力。 <br />414&nbsp;&nbsp; （请求的 URI 过长） 请求的 URI（通常为网址）过长，服务器无法处理。 <br />415&nbsp;&nbsp; （不支持的媒体类型） 请求的格式不受请求页面的支持。 <br />416&nbsp;&nbsp; （请求范围不符合要求） 如果页面无法提供请求的范围，则服务器会返回此状态代码。 <br />417&nbsp;&nbsp; （未满足期望值） 服务器未满足&quot;期望&quot;请求标头字段的要求。 </p><p>5xx（服务器错误）<br />这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误，而不是请求出错。</p><p>代码&nbsp;&nbsp; 说明 <br />500&nbsp;&nbsp; （服务器内部错误）&nbsp; 服务器遇到错误，无法完成请求。 <br />501&nbsp;&nbsp; （尚未实施） 服务器不具备完成请求的功能。 例如，服务器无法识别请求方法时可能会返回此代码。 <br />502&nbsp;&nbsp; （错误网关） 服务器作为网关或代理，从上游服务器收到无效响应。 <br />503&nbsp;&nbsp; （服务不可用） 服务器目前无法使用（由于超载或停机维护）。 通常，这只是暂时状态。 <br />504&nbsp;&nbsp; （网关超时）&nbsp; 服务器作为网关或代理，但是没有及时从上游服务器收到请求。 <br />505&nbsp;&nbsp; （HTTP 版本不受支持） 服务器不支持请求中所用的 HTTP 协议版本。 <br /></p><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/http/" rel="tag">http</a> , <a href="http://yfyfj.cn/go.php/tags/status/" rel="tag">status</a> , <a href="http://yfyfj.cn/go.php/tags/code/" rel="tag">code</a> , <a href="http://yfyfj.cn/go.php/tags/%25E7%258A%25B6%25E6%2580%2581%25E7%25A0%2581/" rel="tag">状态码</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/post/ssh_tunnel.php</link>
<title><![CDATA[SSH Tunnel扫盲]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Fri, 02 Apr 2010 07:44:54 +0000</pubDate> 
<guid>http://yfyfj.cn/post/ssh_tunnel.php</guid> 
<description>
<![CDATA[ 
	作者：老王<br /> <br /> 前些天，由于我不知道如何在Putty里拷贝字符而被朋友们取笑，着实糗了一把。不过被别人B4的一大好处就是你会知耻而后勇，这阵子通过研读<a href="http://chaifeng.com/blog/2007/06/putty_200611.html" target="_blank">PuTTY 中文教程</a>，估计以后不会再犯同样的错误了，在学习Putty的同时偶然发现自己对SSH&nbsp;&nbsp;Tunnel的了解很匮乏，所以便有了今天这篇笔记。<br /> <br /> SSH Tunnel有三种，分别是本地Local（ssh -NfL），远程Remote（ssh -NfR），动态Dynamic（ssh&nbsp;&nbsp;-NfD）。（含义参考<a href="http://linux.die.net/man/1/ssh" target="_blank">man&nbsp;&nbsp;ssh</a>）<br /> <br /> 说明：在我们举例说明用法之前，先假设你有一台机器，它的IP是a.b.c.d。<br /> <br /> <strong>1：本地Local（ssh -NfL）</strong><br /> <br /> ssh -NfL <span style="color: #0000ff">a.b.c.d</span>:<span style="color: #ff0000">1234</span>:<span style="color: #0000ff"><a href="http://www.google.com" target="_blank">www.google.com</a></span>:<span style="color: #ff0000">80</span> <span style="color: #0000ff">a.b.c.d</span><br /> <br /> 此时，在浏览器里键入：<a href="http://a.b.c.d:1234" target="_blank">http://a.b.c.d:1234</a>，就会看到Google的页面了。<br /> <br /> 在绑定1234端口的时候，可以省略前面的ip，如此一来，1234端口就仅仅绑定在localhost地址上，更安全：<br /> <br /> ssh -NfL <span style="color: #ff0000">1234</span>:<span style="color: #0000ff"><a href="http://www.google.com" target="_blank">www.google.com</a></span>:<span style="color: #ff0000">80</span> <span style="color: #0000ff">a.b.c.d</span><br /> <br /> 此时浏览的话就要在a.b.c.d机器上使用<a href="http://localhost:1234" target="_blank">http://localhost:1234</a>了。<br /> <br /> 何时使用本地Tunnel？<br /> <br /> 比如说你在本地访问不了某个网络服务（如<a href="http://www.google.com" target="_blank">www.google.com</a>），而有一台机器（如：a.b.c.d）可以，那么你就可以通过这台机器来访问。<br /> <br /> <strong>2：远程Remote（ssh -NfR）</strong><br /> <br /> ssh -NfR <span style="color: #ff0000">1234</span>:<span style="color: #0000ff">localhost</span>:<span style="color: #ff0000">22</span> <span style="color: #0000ff">a.b.c.d</span><br /> <br /> 接着转到a.b.c.d机器，使用如下命令：<br /> <br /> ssh -p <span style="color: #ff0000">1234</span> <span style="color: #0000ff">localhost</span><br /> <br /> 需要注意的是上下两个命令里的localhost不是同一台。这时你会发现自己已经连上最开始命令里的localhost机器了，也就是执行&ldquo;ssh&nbsp;&nbsp;-NfR&rdquo;的那台机器。<br /> <br /> 何时使用远程Tunnel？<br /> <br /> 比如当你下班回家后就访问不了公司内网的机器了，遇到这种情况可以事先在公司内网的机器上执行远程Tunnel，连上一台公司外网的机器，等你下班回家后 就可以通过公司外网的机器去访问公司内网的机器了。<br /> <br /> <strong>3：动态Dynamic（ssh -NfD）</strong><br /> <br /> ssh -NfD <span style="color: #ff0000">1234</span> <span style="color: #0000ff">a.b.c.d</span><br /> <br /> 如此一来就建立了一台Socket代理机器，接着在浏览器上设置Socket代理：地址是localhost，端口是1234，从此以后，你的访问都是加 密的了！你可以通过访问<a href="http://www.whatismyip.com/" target="_blank">WhatIsMyIP</a>来 确认自己现在的IP，看看是不是已经变成a.b.c.d了。<br /> <br /> 测试阶段，也可以把端口绑定在外网地址上，如此一来，你在浏览器上就可以使用外网地址设置Socket代理，但这仅限于测试，否则，你的机器就不安全了， 随时可能成为肉鸡。对于Windows用户来说，如果讨厌命令行，还可以使用MyEnTunnel来实现同样的功能，配合Firefox的 FoxyPorxy，基本就无敌了，至于具体的配置方法，小崔已经写好了：<a href="http://fendou.org/2010/01/19/firefox-foxyproxy-ssh/" target="_blank">使用Firefox+foxyProxy+SSH翻山越岭</a>。如果你使用的是Chrome的话，则可以选择 Proxy Switchy!来实现同样的效果，恕不多言。<br /> <br /> <strong>补充</strong>：和MyEntunnel比起来，似乎<a href="http://www.bitvise.com/tunnelier" target="_blank">Bitvise Tunnelier</a>更爽一点，下载的话别搞 错了，要的是客户端，个人用户免费。<br /> <br /> 何时使用动态Tunnel？<br /> <br /> 中国人都知道。<br /> <br /> <strong>友情提示：</strong><br /> <br /> 在实验过程中如果想确认端口是否已经生效，可以使用lsof命令，例如：/usr/sbin/lsof -i:1234<br /> <br /> <strong>参考文档：</strong><br /> <br /> <a href="http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?post_id=90121" target="_blank">上班族ssh tunnel求生手冊</a><br /> <a href="http://josephjiang.com/entry.php?id=312" target="_blank">反向建立&nbsp;&nbsp;SSH Tunnel、免 VPN 連回公司</a><br /><br /><strong>来源：</strong><br /><a href="http://hi.baidu.com/thinkinginlamp/blog/item/4e1d510fe7c811216059f3ea.html" target="_blank">http://hi.baidu.com/thinkinginlamp/blog/item/4e1d510fe7c811216059f3ea.html</a><br /><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/ssh/" rel="tag">ssh</a> , <a href="http://yfyfj.cn/go.php/tags/tunnel/" rel="tag">tunnel</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/post/putty_ssh_tunnel.php</link>
<title><![CDATA[Putty ssh Tunnel/端口转发 设置]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Thu, 01 Apr 2010 04:01:24 +0000</pubDate> 
<guid>http://yfyfj.cn/post/putty_ssh_tunnel.php</guid> 
<description>
<![CDATA[ 
	<p><strong>理论上说，支持ssh version2远程登录的主机可以当成一台socks5代理服务器。</strong></p><p>PuTTY的图形化界面也可以配置出一个代理，但是那个用鼠标点击的不自动<br /><img class="insertimage" src="attachment.php?fid=78" border="0" /><br />PuTTY完整版自带的PLINK.exe可以完美的做这个事情，命令是：</p><div class="shell">PLINK.EXE -C -N -D 127.0.0.1:7000 est@202.115.22.x:21314</div><p>解释成中文：</p><div class="shell">PLINK.EXE -启用数据压缩 -不要shell -端口动态转发 代理IP:端口 远程主机用户名@远程主机IP:端口</div><p>就这么简单。</p><p>如果是Linux下，直接使用ssh命令就可以了：</p><div class="shell">ssh -CfNg -D 127.0.0.1:7000 est@202.115.22.x:21314</div><p>代理设置好了之后，在Firefox下这样设置：</p><p><br /><img class="insertimage" src="attachment.php?fid=79" border="0" /><br /><br /><br />其实F-secure&nbsp;&nbsp;也有此功能，不过有点缺陷就是，&nbsp;&nbsp;F-secure 的SSH tunnel&nbsp;&nbsp;的 local tunnel 只能针对一个一个地址，而没办法全部的网址， 需要转发哪个地址，就需要手工添加。</p><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/putty/" rel="tag">putty</a> , <a href="http://yfyfj.cn/go.php/tags/ssh/" rel="tag">ssh</a> , <a href="http://yfyfj.cn/go.php/tags/tunnel/" rel="tag">tunnel</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/post/QQ_web_encode_password.php</link>
<title><![CDATA[QQ网页登陆密码加密原理]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Tue, 02 Feb 2010 13:18:56 +0000</pubDate> 
<guid>http://yfyfj.cn/post/QQ_web_encode_password.php</guid> 
<description>
<![CDATA[ 
	<p>有很多想写农场的助手工具，同之前的我一样。但是又不知道怎么处理QQ的登陆问题，用别人的又不怎么放心，所以就想自己动手。但是很多没基础的又不知道怎么下手。所以&hellip;&hellip; <br />&nbsp;现在我就把密码的加密方式写出来，方便大家使用，自己用得更放心。 <br />&nbsp; <br />&nbsp;1、QQ的加密用的文件，也就是MD5计算方式所在的文件。 <br />&nbsp;<span style="color: #0000ff"><a href="http://imgcache.qq.com/ptlogin/js/comm.js" target="_blank">http://imgcache.qq.com/ptlogin/js/comm.js</a></span> <br />&nbsp; <br />2、把上面文件的内容导入 &ldquo;JScript&rdquo;中 <br />&nbsp;.版本 2 <br />&nbsp;.支持库 script <br />&nbsp;脚本组件 ＝ 脚本组件1 <br />&nbsp;脚本组件.语言 ＝ &ldquo;JScript&rdquo; <br />&nbsp;脚本组件.超时 ＝ -1 <br />&nbsp;脚本组件.执行 (取字节集数据 (#JScript, #文本型, )) <br />&nbsp;加密后的值 ＝ 脚本组件.运行 (&ldquo;md5_3&rdquo;, PASSWORDS) <br />&nbsp;加密后的值 ＝ 脚本组件.运行 (&ldquo;md5&rdquo;, 加密后的值 ＋ 到大写 (验证码值)) <br />&nbsp;提交信息合 ＝ &ldquo;u=&rdquo; ＋ UID ＋ &ldquo;&amp;p=&rdquo; ＋ 加密后的值 ＋ &ldquo;&amp;verifycode=&rdquo; ＋ 验证码值 ＋ &ldquo;&amp;aid=15000102&amp;u1=http%3A%2F%2Fxiaoyou.qq.com%2Findex.php%3Fmod%3Dlogin&amp;fp=&amp;h=1&amp;ptredirect=1&amp;ptlang=0&amp;from_ui=1&amp;dumy=&rdquo; <br />&nbsp;登陆返回信息 ＝ UTF8转ANSI (http.访问网络 (&ldquo;<a href="http://ptlogin2.qq.com/login&rdquo;" target="_blank">http://ptlogin2.qq.com/login&rdquo;</a>, &ldquo;POST&rdquo;, , , 提交信息合)) <br />&nbsp; <br />&nbsp;.如果 (寻找文本 (登陆返回信息, &ldquo;mod=login&rdquo;, , 假) ＞ 0) <br />&nbsp;&nbsp; 返回 (真) &lsquo;登陆成功 <br />&nbsp;.否则 <br />&nbsp;&nbsp; 返回 (假) </p><p>转至：<a href="http://hi.baidu.com/%C1%E8%D4%C6%D7%B7%B7%E7/blog/item" target="_blank">http://hi.baidu.com/%C1%E8%D4%C6%D7%B7%B7%E7/blog/item</a> /2964ccdc863036a9cd1166f6.html</p><p>var hexcase = 1;<br />var b64pad = &quot;&quot;;<br />var chrsz = 8;<br />var mode = 32;<br />function preprocess(A)&#123;&nbsp;&nbsp; //这里A是表格的数据<br />&nbsp;&nbsp;&nbsp; var B = &quot;&quot;;<br />&nbsp;&nbsp;&nbsp; B += A.verifycode.value;&nbsp;&nbsp; //这里是验证码的值<br />&nbsp;&nbsp;&nbsp; B = B.toUpperCase();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里把验证码转换成大写字母<br />&nbsp;&nbsp;&nbsp; A.p.value = md5(md5_3(A.p.value) + B);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>//然后把密码框的数据进行MD5加密 先把密码md5_3处理，然后和验证码一起MD5<br />&nbsp;&nbsp;&nbsp; return true<br />&#125;</p><p>//下面看看md5_3的内容</p><p>function md5_3(B)&#123;<br />&nbsp;&nbsp;&nbsp; var A = new Array;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //申请一个数组<br />&nbsp;&nbsp;&nbsp; A = core_md5(str2binl(B), B.length * chrsz);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //我们看看str2binl发生了什么， B的长度乘以8</p><p>//str2binl函数压缩了前三位，然后对每个字母进行unicode转换，再移位，再看看core_md5是什么<br />&nbsp;&nbsp;&nbsp; A = core_md5(A, 16 * chrsz);<br />&nbsp;&nbsp;&nbsp; A = core_md5(A, 16 * chrsz);<br />&nbsp;&nbsp;&nbsp; return binl2hex(A)<br />&#125;</p><p>function md5(A)&#123;<br />&nbsp;&nbsp;&nbsp; return hex_md5(A)<br />&#125;</p><p>function hex_md5(A)&#123;<br />&nbsp;&nbsp;&nbsp; return binl2hex(core_md5(str2binl(A), A.length * chrsz))<br />&#125;</p><p>function b64_md5(A)&#123;<br />&nbsp;&nbsp;&nbsp; return binl2b64(core_md5(str2binl(A), A.length * chrsz))<br />&#125;</p><p>function str_md5(A)&#123;<br />&nbsp;&nbsp;&nbsp; return binl2str(core_md5(str2binl(A), A.length * chrsz))<br />&#125;</p><p>function hex_hmac_md5(A, B)&#123;<br />&nbsp;&nbsp;&nbsp; return binl2hex(core_hmac_md5(A, B))<br />&#125;</p><p>function b64_hmac_md5(A, B)&#123;<br />&nbsp;&nbsp;&nbsp; return binl2b64(core_hmac_md5(A, B))<br />&#125;</p><p>function str_hmac_md5(A, B)&#123;<br />&nbsp;&nbsp;&nbsp; return binl2str(core_hmac_md5(A, B))<br />&#125;</p><p>function md5_vm_test()&#123;<br />&nbsp;&nbsp;&nbsp; return hex_md5(&quot;abc&quot;) == &quot;900150983cd24fb0d6963f7d28e17f72&quot;<br />&#125;</p><p>function core_md5(K, F)&#123;<br />&nbsp;&nbsp;&nbsp; K[F &gt;&gt; 5] &#124;= 128 &lt;&lt; ((F) % 32);<br />&nbsp;&nbsp;&nbsp; K[(((F + 64) &gt;&gt;&gt; 9) &lt;&lt; 4) + 14] = F;<br />&nbsp;&nbsp;&nbsp; var J = 1732584193;<br />&nbsp;&nbsp;&nbsp; var I = -271733879;<br />&nbsp;&nbsp;&nbsp; var H = -1732584194;<br />&nbsp;&nbsp;&nbsp; var G = 271733878;<br />&nbsp;&nbsp;&nbsp; for (var C = 0; C &lt; K.length; C += 16) &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var E = J;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var D = I;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var B = H;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var A = G;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_ff(J, I, H, G, K[C + 0], 7, -680876936);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_ff(G, J, I, H, K[C + 1], 12, -389564586);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_ff(H, G, J, I, K[C + 2], 17, 606105819);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_ff(I, H, G, J, K[C + 3], 22, -1044525330);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_ff(J, I, H, G, K[C + 4], 7, -176418897);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_ff(G, J, I, H, K[C + 5], 12, 1200080426);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_ff(H, G, J, I, K[C + 6], 17, -1473231341);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_ff(I, H, G, J, K[C + 7], 22, -45705983);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_ff(J, I, H, G, K[C + 8], 7, 1770035416);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_ff(G, J, I, H, K[C + 9], 12, -1958414417);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_ff(H, G, J, I, K[C + 10], 17, -42063);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_ff(I, H, G, J, K[C + 11], 22, -1990404162);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_ff(J, I, H, G, K[C + 12], 7, 1804603682);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_ff(G, J, I, H, K[C + 13], 12, -40341101);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_ff(H, G, J, I, K[C + 14], 17, -1502002290);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_ff(I, H, G, J, K[C + 15], 22, 1236535329);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_gg(J, I, H, G, K[C + 1], 5, -165796510);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_gg(G, J, I, H, K[C + 6], 9, -1069501632);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_gg(H, G, J, I, K[C + 11], 14, 643717713);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_gg(I, H, G, J, K[C + 0], 20, -373897302);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_gg(J, I, H, G, K[C + 5], 5, -701558691);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_gg(G, J, I, H, K[C + 10], 9, 38016083);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_gg(H, G, J, I, K[C + 15], 14, -660478335);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_gg(I, H, G, J, K[C + 4], 20, -405537848);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_gg(J, I, H, G, K[C + 9], 5, 568446438);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_gg(G, J, I, H, K[C + 14], 9, -1019803690);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_gg(H, G, J, I, K[C + 3], 14, -187363961);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_gg(I, H, G, J, K[C + 8], 20, 1163531501);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_gg(J, I, H, G, K[C + 13], 5, -1444681467);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_gg(G, J, I, H, K[C + 2], 9, -51403784);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_gg(H, G, J, I, K[C + 7], 14, 1735328473);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_gg(I, H, G, J, K[C + 12], 20, -1926607734);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_hh(J, I, H, G, K[C + 5], 4, -378558);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_hh(G, J, I, H, K[C + 8], 11, -2022574463);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_hh(H, G, J, I, K[C + 11], 16, 1839030562);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_hh(I, H, G, J, K[C + 14], 23, -35309556);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_hh(J, I, H, G, K[C + 1], 4, -1530992060);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_hh(G, J, I, H, K[C + 4], 11, 1272893353);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_hh(H, G, J, I, K[C + 7], 16, -155497632);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_hh(I, H, G, J, K[C + 10], 23, -1094730640);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_hh(J, I, H, G, K[C + 13], 4, 681279174);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_hh(G, J, I, H, K[C + 0], 11, -358537222);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H = md5_hh(H, G, J, I, K[C + 3], 16, -722521979);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = md5_hh(I, H, G, J, K[C + 6], 23, 76029189);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J = md5_hh(J, I, H, G, K[C + 9], 4, -640364487);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G = md5_hh(G, J, I, H, K[C + 12], 11, -421815835);</p><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/qq/" rel="tag">qq</a> , <a href="http://yfyfj.cn/go.php/tags/%25E5%25AF%2586%25E7%25A0%2581%25E5%258A%25A0%25E5%25AF%2586/" rel="tag">密码加密</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/read.php/41.htm</link>
<title><![CDATA[rtpbreak-1.3.tgz (强大的rtp抓包)]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Wed, 06 Aug 2008 08:22:16 +0000</pubDate> 
<guid>http://yfyfj.cn/read.php/41.htm</guid> 
<description>
<![CDATA[ 
	<h1 align="center">rtpbreak 1.3</h1><div class="author_info"><p align="center"><strong>xenion - Michele Dallachiesa</strong></p><p align="center"><em>michele dot dallachiesa at poste dot it</em></p></div><br /><h2><a name="SECTION00010000000000000000" title="SECTION00010000000000000000"></a>Contents </h2><!--Table of Contents--><ul class="TofC"><li><a name="tex2html14" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00020000000000000000" title="tex2html14">Introduction</a> </li><li><a name="tex2html15" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00030000000000000000" title="tex2html15">Usage</a> </li><li><a name="tex2html16" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00040000000000000000" title="tex2html16">Examples</a> <ul><li><a name="tex2html17" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00041000000000000000" title="tex2html17">Record, mix and replay a VoIP call</a> </li><li><a name="tex2html18" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00042000000000000000" title="tex2html18">Analyze an RTP session</a> </li><li><a name="tex2html19" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00043000000000000000" title="tex2html19">Particular scenarios</a> </li></ul><br /></li><li><a name="tex2html20" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00050000000000000000" title="tex2html20">How it works</a> </li><li><a name="tex2html21" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00060000000000000000" title="tex2html21">Dependencies and compilation</a> </li><li><a name="tex2html22" href="file:///home/bob/download/rtpbreak-1.3/doc/rtpbreak_en.html#SECTION00070000000000000000" title="tex2html22">Links</a> </li></ul><!--End of Table of Contents--><p></p><h1><a name="SECTION00020000000000000000" title="SECTION00020000000000000000"></a>Introduction </h1>With rtpbreak you can detect, reconstruct and analyze any RTP session. It doesn't require the presence of RTCP packets and works independently form the used signaling protocol (SIP, H.323, SCCP, ...). The input is a sequence of packets, the output is a set of files you can use as input for other tools (wireshark/tshark, sox, grep/awk/cut/cat/sed, ...). It supports also wireless (AP_DLT_IEEE802_11) networks. This is a list of scenarios where rtpbreak is a good choice: <ul><li>reconstruct any RTP stream with an unknown or unsupported signaling protocol </li><li>reconstruct any RTP stream in wireless networks, while doing channel hopping (VoIP activity detector) </li><li>reconstruct and decode any RTP stream in batch mode (with sox, asterisk, ...) </li><li>reconstruct any already existing RTP stream </li><li>reorder the packets of any RTP stream for later analysis (with tshark, wireshark, ...) </li><li>build a tiny wireless VoIP tapping system in a single chip Linux unit </li><li>build a complete VoIP tapping system (rtpbreak would be just the RTP dissector module!) </li></ul>This project is released under license GPL version 2. <h1><a name="SECTION00030000000000000000" title="SECTION00030000000000000000"></a>Usage </h1>The unique mandatory input parameter is the packet source (network interface or pcap file). This is the list of accepted parameters: <p></p><dl><dt><strong>INPUT</strong> </dt><dd><dl><dt><strong>-r &lt;str&gt;</strong> </dt><dd>Read packets from file (pcap format) &lt;str&gt; </dd><dt><strong>-i &lt;str&gt;</strong> </dt><dd>Read packets from network interface &lt;str&gt; </dd><dt><strong>-L &lt;int&gt;</strong> </dt><dd>Force the datalink header length to &lt;int&gt; bytes. This is useful if the interface type is not correctly recognized by libpcap </dd></dl><p></p></dd><dt><strong>OUTPUT</strong> </dt><dd><dl><dt><strong>-d &lt;str&gt;</strong> </dt><dd>Set the output directory to &lt;str&gt; </dd><dt><strong>-w</strong> </dt><dd>Disable the raw dump of RTP sessions </dd><dt><strong>-W</strong> </dt><dd>Disable the pcap dump of RTP sessions </dd><dt><strong>-g</strong> </dt><dd>Fill the gaps of lost packets in raw dumps with the last sniffed packet, preventing desynchronization problems when decoding/mixing multiple RTP streams (with sox, ...) </dd><dt><strong>-n</strong> </dt><dd>Dump packets passing the single packet pattern but not the multiple packets pattern (the noise packets) to pcap file </dd><dt><strong>-f</strong> </dt><dd>Disable stdout logging </dd><dt><strong>-F</strong> </dt><dd>Enable syslog logging </dd><dt><strong>-v</strong> </dt><dd>Be verbose </dd></dl><p></p></dd><dt><strong>SELECT</strong> </dt><dd><dl><dt><strong>-m</strong> </dt><dd>Sniff packets in promiscuous mode </dd><dt><strong>-p &lt;str&gt;</strong> </dt><dd>Consider only packets matching the libpcap filter &lt;str&gt; </dd><dt><strong>-e</strong> </dt><dd>Expect an even destination UDP port. The RTP packets must have an even destination UDP port. This should be always true, anyway some VoIP networks (like Yahoo) don't respect this rule </dd><dt><strong>-u</strong> </dt><dd>Expect unprivileged source/destination UDP ports (&gt; 1024). This should always be true </dd><dt><strong>-y &lt;int&gt;</strong> </dt><dd>The RTP packets must have exactly this payload type. For example, if we want only RTP streams with data encoded in G.711 ulaw, we should add the option -y 0, value obtained from the -k option </dd><dt><strong>-l &lt;int&gt;</strong> </dt><dd>The RTP payload length must be exactly &lt;int&gt; bytes </dd><dt><strong>-t &lt;float&gt;</strong> </dt><dd>Consider terminated any session without new packets for &lt;float&gt; seconds </dd><dt><strong>-T &lt;float&gt;</strong> </dt><dd>Consider a timeout of &lt;float&gt; seconds in the pattern over multiple packets </dd><dt><strong>-P &lt;int&gt;</strong> </dt><dd>Consider &lt;int&gt; packets in the pattern over multiple packets </dd></dl><p></p></dd><dt><strong>EXECUTION</strong> </dt><dd><dl><dt><strong>-Z &lt;str&gt;</strong> </dt><dd>Run as user &lt;str&gt; </dd><dt><strong>-D</strong> </dt><dd>Run in background (option -f implicit) </dd></dl><p></p></dd><dt><strong>MISC</strong> </dt><dd><dl><dt><strong>-k</strong> </dt><dd>Dump a list of known RTP payload types. Note that, because of the useless functionality called &quot;Dynamic RTP Payload&quot;, those values shouldn't be considered too much. The rtp_payload_type and codec association is in fact concorded through the Signaling messages (SIP, H.323, SCCP, ...), assigning new values also for those codecs already having a standard and predefined value </dd><dt><strong>-h</strong> </dt><dd>Display a summary of the valid options and exit </dd></dl><p></p></dd></dl><p>The files in the output directory have the following naming scheme: The set of files with pattern <span class="textit">rtp.x.*</span> refer to the rtpbreak execution number <span class="textit">x</span>, the subset of files with pattern <span class="textit">rtp.x.y.*</span> refer to the RTP session number <span class="textit">y</span> (of the rtpbreak execution number <span class="textit">x</span>). At each execution and at each RTP session detection, <span class="textit">x</span> and <span class="textit">y</span> are respectively incremented. The set of output files of the rtpbreak execution number <span class="textit">x</span> is organized as follows: </p><dl><dt><strong>rtp.x.txt</strong> </dt><dd>The rtpbreak execution log, always generated </dd><dt><strong>rtp.x.noise.pcap</strong> </dt><dd>The noise packets, generated with option <span class="textit">-n</span> enabled </dd><dt><strong>rtp.x.y.*</strong> </dt><dd>For each detected RTP stream <span class="textit">y</span>: <dl><dt><strong>rtp.x.y.raw</strong> </dt><dd>The transported raw data of the RTP session <span class="textit">y</span>. Generated by default, can be disabled with option <span class="textit">-w</span> enabled </dd><dt><strong>rtp.x.y.pcap</strong> </dt><dd>The reordered packets of the RTP session <span class="textit">y</span>. Generated by default, can be disabled with option <span class="textit">-W</span> enabled </dd><dt><strong>rtp.x.y.txt</strong> </dt><dd>The <span class="textit">y</span> RTP session log, always generated </dd></dl></dd></dl><h1><a name="SECTION00040000000000000000" title="SECTION00040000000000000000"></a>Examples </h1>In this section there are some commented examples. <h2><a name="SECTION00041000000000000000" title="SECTION00041000000000000000"></a>Record, mix and replay a VoIP call </h2>Scope: We want to detect, reconstruct and decode a conversation between two VoIP Wireless phones, the final output should be a wav file. First of all, we sniff the packets with rtpbreak (fill gaps, sniff packets in promisc mode, gather packets from network interface wifi0, use './logz/' as output directory): <pre>xenion@gollum:~/dev/rtpbreak-1.3$ sudo src/rtpbreak -i wifi0 -g -m -d logz<br /> + rtpbreak v1.3 running here!<br /> + pid: 3580, date/time: 19/02/2008#09:49:21<br /> + Configuration<br />&nbsp;&nbsp; + INPUT<br />&nbsp;&nbsp;&nbsp;&nbsp; Packet source: iface 'wifi0'<br />&nbsp;&nbsp;&nbsp;&nbsp; Force datalink header length: disabled<br />&nbsp;&nbsp; + OUTPUT<br />&nbsp;&nbsp;&nbsp;&nbsp; Output directory: 'logz'<br />&nbsp;&nbsp;&nbsp;&nbsp; RTP raw dumps: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; RTP pcap dumps: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Fill gaps: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Dump noise: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Logfile: 'logz/rtp.0.txt'<br />&nbsp;&nbsp;&nbsp;&nbsp; Logging to stdout: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Logging to syslog: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Be verbose: disabled<br />&nbsp;&nbsp; + SELECT<br />&nbsp;&nbsp;&nbsp;&nbsp; Sniff packets in promisc mode: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Add pcap filter: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting even destination UDP port: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting unprivileged source/destination UDP ports: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting RTP payload type: any<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting RTP payload length: any<br />&nbsp;&nbsp;&nbsp;&nbsp; Packet timeout: 10.00 seconds<br />&nbsp;&nbsp;&nbsp;&nbsp; Pattern timeout: 0.25 seconds<br />&nbsp;&nbsp;&nbsp;&nbsp; Pattern packets: 5<br />&nbsp;&nbsp; + EXECUTION<br />&nbsp;&nbsp;&nbsp;&nbsp; Running as user/group: root/root<br />&nbsp;&nbsp;&nbsp;&nbsp; Running daemonized: disabled<br /> * You can dump stats sending me a SIGUSR2 signal<br /> * Reading packets...<br /> ! [rtp0] detected: pt=0(g711U) 192.168.0.30:2072 =&gt; 192.168.0.20:2074<br /> ! [rtp1] detected: pt=0(g711U) 192.168.0.20:2074 =&gt; 192.168.0.30:2072<br /> * [rtp1] probable reverse RTP stream: [rtp0]<br /> + Status<br />&nbsp;&nbsp; Alive RTP Sessions: 2<br />&nbsp;&nbsp; Closed RTP Sessions: 0<br />&nbsp;&nbsp; Detected RTP Sessions: 2<br />&nbsp;&nbsp; Flushed RTP packets: 3358<br />&nbsp;&nbsp; Lost RTP packets: 122 (3.51%)<br />&nbsp;&nbsp; Noise (false positive) packets: 0<br /> + [rtp1] stats: packets inbuffer=262 flushed=1673 lost=61(3.52%), call_length=1m2s<br /> + [rtp0] stats: packets inbuffer=270 flushed=1685 lost=61(3.49%), call_length=1m2s<br /> * [rtp1] closed: packets inbuffer=0 flushed=2800 lost=115(3.95%), call_length=1m28s<br /> * [rtp0] closed: packets inbuffer=0 flushed=2819 lost=106(3.62%), call_length=1m28s<br />--<br />Caught SIGINT signal (2), cleaning up...<br />--<br /> + Status<br />&nbsp;&nbsp; Alive RTP Sessions: 0<br />&nbsp;&nbsp; Closed RTP Sessions: 2<br />&nbsp;&nbsp; Detected RTP Sessions: 2<br />&nbsp;&nbsp; Flushed RTP packets: 5619<br />&nbsp;&nbsp; Lost RTP packets: 221 (3.78%)<br />&nbsp;&nbsp; Noise (false positive) packets: 0<br /> + No active RTP streams<br /><br />xenion@gollum:~/dev/rtpbreak-1.3$<br /></pre><p>We've sent a SIGUSR2 signal to the rtpbreak process at call_length=1m2s, forcing a stats print. The final output directory content is the following: </p><p></p><pre>xenion@gollum:~/dev/rtpbreak-1.3$ ls -1 logz<br />rtp.0.0.pcap<br />rtp.0.0.raw<br />rtp.0.0.txt<br />rtp.0.1.pcap<br />rtp.0.1.raw<br />rtp.0.1.txt<br />rtp.0.txt<br />xenion@gollum:~/dev/rtpbreak-1.3$<br /></pre><p>Those are the two RTP sessions logs: </p><pre>xenion@gollum:~/dev/rtpbreak-1.3$ cat logz/rtp.0.0.txt <br />RTP stream id: rtp.0.0<br />Packet source: iface&nbsp;&nbsp;'wifi0'<br />First seen packet: 19/02/2008#09:49:29 (pcap time)<br />Stream peers: 192.168.0.30:2072 =&gt; 192.168.0.20:2074<br />RTP ssrc: 1695569992<br />RTP payload type: 0 (ITU-T G.711 PCMU)<br />Last seen packet: 19/02/2008#09:50:57 (pcap time)<br />Call length: 1m28s<br />Flushed packets: 2819<br />Lost packets: 106 (3.62%)<br />RTP payload length: 240 bytes (fixed)<br />xenion@gollum:~/dev/rtpbreak-1.3$ cat logz/rtp.0.1.txt <br />RTP stream id: rtp.0.1<br />Packet source: iface&nbsp;&nbsp;'wifi0'<br />First seen packet: 19/02/2008#09:49:29 (pcap time)<br />Stream peers: 192.168.0.20:2074 =&gt; 192.168.0.30:2072<br />RTP ssrc: 112268413<br />RTP payload type: 0 (ITU-T G.711 PCMU)<br />Probable reverse RTP stream id: rtp.0.0<br />Last seen packet: 19/02/2008#09:50:57 (pcap time)<br />Call length: 1m28s<br />Flushed packets: 2800<br />Lost packets: 115 (3.95%)<br />RTP payload length: 240 bytes (fixed)<br />xenion@gollum:~/dev/rtpbreak-1.3$<br /></pre><p>Now, we've to decode, mix and replay this recorded call: </p><p></p><pre>xenion@gollum:~/dev/rtpbreak-1.3$ sox -r8000 -c1 -t ul logz/rtp.0.0.raw -t wav logz/0.wav<br />xenion@gollum:~/dev/rtpbreak-1.3$ sox -r8000 -c1 -t ul logz/rtp.0.1.raw -t wav logz/1.wav<br />xenion@gollum:~/dev/rtpbreak-1.3$ sox -m logz/0.wav logz/1.wav logz/call.wav<br />xenion@gollum:~/dev/rtpbreak-1.3$ mplayer logz/call.wav<br /></pre><p></p><h2><a name="SECTION00042000000000000000" title="SECTION00042000000000000000"></a>Analyze an RTP session </h2>Scope: We want to analyze a pcap file with some RTP streams, using the most aggressive configuration of the detection heuristics. First of all, we reconstruct the RTP streams with rtpbreak: <pre>xenion@gollum:~/dev/rtpbreak-1.3$ rtpbreak -P2 -t100 -T100 -d logz -r h323.pcap&nbsp;&nbsp;<br /> + rtpbreak v1.3 running here!<br /> + pid: 4613, date/time: 19/02/2008#10:18:54<br /> + Configuration<br />&nbsp;&nbsp; + INPUT<br />&nbsp;&nbsp;&nbsp;&nbsp; Packet source: rxfile 'h323.pcap'<br />&nbsp;&nbsp;&nbsp;&nbsp; Force datalink header length: disabled<br />&nbsp;&nbsp; + OUTPUT<br />&nbsp;&nbsp;&nbsp;&nbsp; Output directory: 'logz'<br />&nbsp;&nbsp;&nbsp;&nbsp; RTP raw dumps: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; RTP pcap dumps: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Fill gaps: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Dump noise: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Logfile: 'logz/rtp.1.txt'<br />&nbsp;&nbsp;&nbsp;&nbsp; Logging to stdout: enabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Logging to syslog: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Be verbose: disabled<br />&nbsp;&nbsp; + SELECT<br />&nbsp;&nbsp;&nbsp;&nbsp; Sniff packets in promisc mode: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Add pcap filter: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting even destination UDP port: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting unprivileged source/destination UDP ports: disabled<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting RTP payload type: any<br />&nbsp;&nbsp;&nbsp;&nbsp; Expecting RTP payload length: any<br />&nbsp;&nbsp;&nbsp;&nbsp; Packet timeout: 100.00 seconds<br />&nbsp;&nbsp;&nbsp;&nbsp; Pattern timeout: 100.00 seconds<br />&nbsp;&nbsp;&nbsp;&nbsp; Pattern packets: 2<br />&nbsp;&nbsp; + EXECUTION<br />&nbsp;&nbsp;&nbsp;&nbsp; Running as user/group: xenion/xenion<br />&nbsp;&nbsp;&nbsp;&nbsp; Running daemonized: disabled<br /> * You can dump stats sending me a SIGUSR2 signal<br /> * Reading packets...<br /> ! [rtp0] detected: pt=102(?) 172.16.1.109:5004 =&gt; 172.16.1.105:5012<br /> ! [rtp1] detected: pt=0(g711U) 172.16.1.105:5012 =&gt; 172.16.1.109:5004<br /> * [rtp1] probable reverse RTP stream: [rtp0]<br /> ! [rtp2] detected: pt=31(h261) 172.16.1.109:5006 =&gt; 172.16.1.105:5014<br /> * eof reached.<br />--<br />Caught SIGTERM signal (15), cleaning up...<br />--<br /> * [rtp2] closed: packets inbuffer=0 flushed=2286 lost=0(0.00%), call_length=4m10s<br /> * [rtp1] closed: packets inbuffer=0 flushed=4465 lost=0(0.00%), call_length=4m8s<br /> * [rtp0] closed: packets inbuffer=0 flushed=6254 lost=0(0.00%), call_length=4m10s<br /> + Status<br />&nbsp;&nbsp; Alive RTP Sessions: 0<br />&nbsp;&nbsp; Closed RTP Sessions: 3<br />&nbsp;&nbsp; Detected RTP Sessions: 3<br />&nbsp;&nbsp; Flushed RTP packets: 13005<br />&nbsp;&nbsp; Lost RTP packets: 0 (0.00%)<br />&nbsp;&nbsp; Noise (false positive) packets: 70<br /> + No active RTP streams<br /><br />xenion@gollum:~/dev/rtpbreak-1.3$<br /></pre>The output directory content, after running examples 1 and 2, should be the following: <p></p><pre>xenion@gollum:~/dev/rtpbreak-1.3$ ls -1 logz<br />0.wav<br />1.wav<br />call.wav<br />rtp.0.0.pcap<br />rtp.0.0.raw<br />rtp.0.0.txt<br />rtp.0.1.pcap<br />rtp.0.1.raw<br />rtp.0.1.txt<br />rtp.0.txt<br />rtp.1.0.pcap<br />rtp.1.0.raw<br />rtp.1.0.txt<br />rtp.1.1.pcap<br />rtp.1.1.raw<br />rtp.1.1.txt<br />rtp.1.2.pcap<br />rtp.1.2.raw<br />rtp.1.2.txt<br />rtp.1.txt<br />xenion@gollum:~/dev/rtpbreak-1.3$<br /></pre>The set of files of the second rtpbreak execution have prefix <span class="textit">rtp.1</span>. Those are the three RTP sessions logs: <pre>xenion@gollum:~/dev/rtpbreak-1.3$ cat logz/rtp.1.0.txt<br />RTP stream id: rtp.1.0<br />Packet source: rxfile 'h323.pcap'<br />First seen packet: 14/11/2006#17:57:29 (pcap time)<br />Stream peers: 172.16.1.109:5004 =&gt; 172.16.1.105:5012<br />RTP ssrc: 268399165<br />RTP payload type: 102 (Unknown)<br />Last seen packet: 14/11/2006#18:01:39 (pcap time)<br />Call length: 4m10s<br />Flushed packets: 6254<br />Lost packets: 0 (0.00%)<br />RTP payload length: 65 bytes (fixed)<br />xenion@gollum:~/dev/rtpbreak-1.3$ cat logz/rtp.1.1.txt<br />RTP stream id: rtp.1.1<br />Packet source: rxfile 'h323.pcap'<br />First seen packet: 14/11/2006#17:57:29 (pcap time)<br />Stream peers: 172.16.1.105:5012 =&gt; 172.16.1.109:5004<br />RTP ssrc: 1910395951<br />RTP payload type: 0 (ITU-T G.711 PCMU)<br />Probable reverse RTP stream id: rtp.1.0<br />Last seen packet: 14/11/2006#18:01:37 (pcap time)<br />Call length: 4m8s<br />Flushed packets: 4465<br />Lost packets: 0 (0.00%)<br />RTP payload length: 240 bytes (fixed)<br />xenion@gollum:~/dev/rtpbreak-1.3$ cat logz/rtp.1.2.txt<br />RTP stream id: rtp.1.2<br />Packet source: rxfile 'h323.pcap'<br />First seen packet: 14/11/2006#17:57:29 (pcap time)<br />Stream peers: 172.16.1.109:5006 =&gt; 172.16.1.105:5014<br />RTP ssrc: 267301810<br />RTP payload type: 31 (ITU-T H.261)<br />Last seen packet: 14/11/2006#18:01:39 (pcap time)<br />Call length: 4m10s<br />Flushed packets: 2286<br />Lost packets: 0 (0.00%)<br />RTP payload length: 945 bytes (variable, this is the last seen)<br />xenion@gollum:~/dev/rtpbreak-1.3$<br /></pre><p>Now, we completely dissect the first packet of the third RTP session with tshark: </p><p></p><pre>xenion@gollum:~/dev/rtpbreak-1.3$ cat logz/rtp.1.2.txt &#124; grep &quot;Stream peers&quot;<br />Stream peers: 172.16.1.109:5006 =&gt; 172.16.1.105:5014<br />xenion@gollum:~/dev/rtpbreak-1.3$ tshark -r logz/rtp.1.2.pcap -d udp.port==5006,rtp -c 1 -V<br />Frame 1 (1073 bytes on wire, 1073 bytes captured)<br />&nbsp;&nbsp;&nbsp;&nbsp;Arrival Time: Nov 14, 2006 17:57:29.972300000<br />&nbsp;&nbsp;&nbsp;&nbsp;[Time delta from previous captured frame: 0.000000000 seconds]<br />&nbsp;&nbsp;&nbsp;&nbsp;[Time delta from previous displayed frame: 0.000000000 seconds]<br />&nbsp;&nbsp;&nbsp;&nbsp;[Time since reference or first frame: 0.000000000 seconds]<br />&nbsp;&nbsp;&nbsp;&nbsp;Frame Number: 1<br />&nbsp;&nbsp;&nbsp;&nbsp;Frame Length: 1073 bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;Capture Length: 1073 bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;[Frame is marked: False]<br />&nbsp;&nbsp;&nbsp;&nbsp;[Protocols in frame: eth:ip:udp:rtp:h261]<br />Ethernet II, Src: Dell_15:09:a6 (00:12:3f:15:09:a6), Dst: Dell_ca:ec:cd (00:14:22:ca:ec:cd)<br />&nbsp;&nbsp;&nbsp;&nbsp;Destination: Dell_ca:ec:cd (00:14:22:ca:ec:cd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address: Dell_ca:ec:cd (00:14:22:ca:ec:cd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />&nbsp;&nbsp;&nbsp;&nbsp;Source: Dell_15:09:a6 (00:12:3f:15:09:a6)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address: Dell_15:09:a6 (00:12:3f:15:09:a6)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />&nbsp;&nbsp;&nbsp;&nbsp;Type: IP (0x0800)<br />Internet Protocol, Src: 172.16.1.109 (172.16.1.109), Dst: 172.16.1.105 (172.16.1.105)<br />&nbsp;&nbsp;&nbsp;&nbsp;Version: 4<br />&nbsp;&nbsp;&nbsp;&nbsp;Header length: 20 bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN: 0x00)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001 00.. = Differentiated Services Codepoint: Unknown (0x04)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.... ..0. = ECN-Capable Transport (ECT): 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.... ...0 = ECN-CE: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;Total Length: 1059<br />&nbsp;&nbsp;&nbsp;&nbsp;Identification: 0x0000 (0)<br />&nbsp;&nbsp;&nbsp;&nbsp;Flags: 0x04 (Don't Fragment)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0... = Reserved bit: Not set<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.1.. = Don't fragment: Set<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;..0. = More fragments: Not set<br />&nbsp;&nbsp;&nbsp;&nbsp;Fragment offset: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;Time to live: 64<br />&nbsp;&nbsp;&nbsp;&nbsp;Protocol: UDP (0x11)<br />&nbsp;&nbsp;&nbsp;&nbsp;Header checksum: 0xdbc3 [correct]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Good: True]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Bad : False]<br />&nbsp;&nbsp;&nbsp;&nbsp;Source: 172.16.1.109 (172.16.1.109)<br />&nbsp;&nbsp;&nbsp;&nbsp;Destination: 172.16.1.105 (172.16.1.105)<br />User Datagram Protocol, Src Port: wsm-server (5006), Dst Port: 5014 (5014)<br />&nbsp;&nbsp;&nbsp;&nbsp;Source port: wsm-server (5006)<br />&nbsp;&nbsp;&nbsp;&nbsp;Destination port: 5014 (5014)<br />&nbsp;&nbsp;&nbsp;&nbsp;Length: 1039<br />&nbsp;&nbsp;&nbsp;&nbsp;Checksum: 0x5f17 [incorrect, should be 0x270c (maybe caused by &quot;UDP checksum offload&quot;?)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Good Checksum: False]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Bad Checksum: True]<br />Real-Time Transport Protocol<br />&nbsp;&nbsp;&nbsp;&nbsp;10.. .... = Version: RFC 1889 Version (2)<br />&nbsp;&nbsp;&nbsp;&nbsp;..0. .... = Padding: False<br />&nbsp;&nbsp;&nbsp;&nbsp;...0 .... = Extension: False<br />&nbsp;&nbsp;&nbsp;&nbsp;.... 0000 = Contributing source identifiers count: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;0... .... = Marker: False<br />&nbsp;&nbsp;&nbsp;&nbsp;Payload type: ITU-T H.261 (31)<br />&nbsp;&nbsp;&nbsp;&nbsp;Sequence number: 42926<br />&nbsp;&nbsp;&nbsp;&nbsp;Timestamp: 3003<br />&nbsp;&nbsp;&nbsp;&nbsp;Synchronization Source identifier: 0x0feeb3b2 (267301810)<br />ITU-T Recommendation H.261<br />&nbsp;&nbsp;&nbsp;&nbsp;Start bit position: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;End bit position: 2<br />&nbsp;&nbsp;&nbsp;&nbsp;Intra frame encoded data flag: False<br />&nbsp;&nbsp;&nbsp;&nbsp;Motion vector flag: True<br />&nbsp;&nbsp;&nbsp;&nbsp;GOB Number: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;Macroblock address predictor: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;Quantizer: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;Horizontal motion vector data: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;Vertical motion vector data: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;H.261 stream: 00010006000113220300C0300DFF7FD1019B8103881035C0...<br /><br />xenion@gollum:~/dev/rtpbreak-1.3$<br /></pre>The wrong UDP checksum comes from the original network packet, rtpbreak only reorders the network packets of each RTP stream. As we did, rtpbreak can be used together with tshark/wireshark to handle complex needs. <p></p><h2><a name="SECTION00043000000000000000" title="SECTION00043000000000000000"></a>Particular scenarios </h2><p>Scope: We want to (successfully) handle some particular scenarios. This is a list of problem description, (probable) cause and (hopefully) solution. </p><ol><li><dl><dt><strong>Problem</strong> </dt><dd>An improbable high number of RTP sessions and noise packets is detected. </dd><dt><strong>Cause</strong> </dt><dd>There is some type of silence suppression. </dd><dt><strong>Solution</strong> </dt><dd>Dilate the timeouts: <pre>rtpbreak -i eth0 -n -t100 -T100<br /></pre></dd></dl><p></p></li><li><dl><dt><strong>Problem</strong> </dt><dd>An expected RTP session is not recognized and some noise packets are detected. </dd><dt><strong>Cause</strong> </dt><dd>The conversation has been immediately terminated. </dd><dt><strong>Solution</strong> </dt><dd>Reduce the number of required packets for the multiple packets pattern: <pre>rtpbreak -i eth0 -n -P2<br /></pre></dd></dl><p></p></li><li><dl><dt><strong>Problem</strong> </dt><dd>The expected RTP sessions are not recognized. </dd><dt><strong>Cause</strong> </dt><dd>The protocol is not RTP, the network interface is not in promisc mode, the conversation is very disturbed, the conversation was immediately terminated. </dd><dt><strong>Solution</strong> </dt><dd>Dilate the timeouts and reduce the number of required packets for the multiple packets pattern: <pre>rtpbreak -i eth0 -m -n -P2 -t100 -T100<br /></pre>This is the most aggressive (and computationally expensive) configuration of the detection heuristics and will always detect any RTP session. </dd></dl><p></p></li></ol><p></p><h1><a name="SECTION00050000000000000000" title="SECTION00050000000000000000"></a>How it works </h1><p>The RTP sessions are composed by an ordered sequence of RTP packets. Those packets transport the Real Time data using the UDP transport protocol. The RTP packets must respect some well defined rules in order to be considered valid, this characteristic allows us to define a pattern on the single packet that is used to discriminate the captured network traffic from packets that can be RTP and those that securely are not. The fixed RTP header has this format: </p><p></p><pre> 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br /> 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1<br />+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br />&#124;V=2&#124;P&#124;X&#124;&nbsp;&nbsp;CC&nbsp;&nbsp; &#124;M&#124;&nbsp;&nbsp;&nbsp;&nbsp; PT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sequence number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br />+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timestamp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br />+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronization source (SSRC) identifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br />+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contributing source (CSRC) identifiers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br />+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br /></pre><p>The following checks are performed (on each sniffed packet): </p><ol><li>Destination UDP port: The destination UDP port must be even, as specified in [rfc1889]. Beyond this, it must be greater than 1024. This because in the UDP and TCP transport protocols the ports &lt;= 1024 are considered privileged and they can't be used by user applications, like VoIP clients. </li><li>Minimal packet size: The UDP payload size must be greater than 12 bytes, this is the size of the fixed header always present in any RTP packet. </li><li>RTP version: The RTP protocol version always used is 2, so the value of the V field in the fixed RTP header must be equal to 2. </li><li>Padding bit: RTP allows to append some bytes as packet trailer, that must be ignored. The number of those bytes is specified exactly in the last packet byte. The P field in the fixed RTP header indicates if this functionality is active. If active, the RTP payload size is adjusted, checking it to be greater than 0. </li><li>CSRC list: RTP allows the RTP Mixer to insert a list of contributing sources. This list, if present, follows immediately the fixed RTP header and it's composed by addresses (of 32 bits), their number is indicated by the CC field in the fixed RTP header. If present, the RTP payload size is adjusted, checking it to be greater than 0. </li><li>Extension bit: RTP allows to extend the fixed RTP header. If present, this extension follows the fixed RTP header and the optional CSRC list. His format follows: <pre> 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br /> 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1<br />+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defined by profile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br />+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header extension&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br /></pre><p>The length field indicates the extension size, header of the extension excluded. His presence is indicated by the X field value. If active, the RTP payload size is adjusted, checking it to be greater than 0. </p><p></p></li></ol><p>The UDP packets passing those checks are considered like &quot;maybe RTP&quot; packets. Note that the IP and UDP packet checksums aren't checked because quite often they're erroneously computed by VoIP clients. The UDP packets passing those checks are compared with the already detected RTP sessions (this is called pattern over multiple packets). The comparison is done considering the following informations: </p><ol><li>SSRC: The value of the SSRC field in the fixed RTP header indicates the unique identifier of the Sender of the session. His value is constant in all RTP packets of the same session. </li><li>IP addresses and UDP ports: The IP addresses and the UDP ports of the Sender and Receiver are constant in all RTP packets of the same session. </li><li>Sequence number: The seq field in the fixed RTP header indicates the packet sequence number, a value that isn't necessarily initialized to 1 but that it's strictly increasing in RTP packets of the same session. It's considered a window of acceptable values for each session, that changes dynamically. This allows to consider the eventuality that some RTP packets may have been lost. </li><li>Timestamp: The ts field in the fixed RTP header indicates the sampling timestamp of the first byte of the RTP payload, a value strictly increasing in RTP packets of the same session. Also in this case it's considered a window of acceptable values for each session, that changes dynamically. This allows to consider the eventuality that some RTP packets may have been lost. </li></ol><p>If it's identified a possible session, the UDP packet is inserted in his buffer. If this doesn't happen, a new one is created. When to a session are assigned a minimal set of UDP packets, it's considered valid and any UDP packet in his buffer is considered definitely RTP. This must happen before a timeout, after that the session is considered a false positive (noise packets) and destroyed. </p><p></p><h1><a name="SECTION00060000000000000000" title="SECTION00060000000000000000"></a>Dependencies and compilation </h1>This is a Unix-oriented application written in C. The compilation requires a C compiler like gcc and the following libs: libpcap (&ge;0.7), libnet (&ge;1.1). In debian, you need the following packages (or higher versions): <ul><li>libnet1 </li><li>libnet1-dev </li><li>libpcap0.7 </li><li>libpcap0.7-dev </li></ul><p>To compile, type &quot;make&quot; in the top directory. </p><p>In order to decode the RTP streams with <span class="textit">sox</span>, you need <span class="textit">sox</span> with the support for the required formats. In debian, you need the following packages: </p><p></p><ul><li>sox </li><li>libsox-fmt-all </li></ul><p></p><h1><a name="SECTION00070000000000000000" title="SECTION00070000000000000000"></a><a name="Links" title="Links"></a><br />Links </h1><ul><li>Antifork: <a name="tex2html1" href="http://www.antifork.org/" title="tex2html1"><a href="http://www.antifork.org" target="_blank">http://www.antifork.org</a></a> </li><li>xenion headquarter: <a name="tex2html2" href="http://xenion.antifork.org/" title="tex2html2"><a href="http://xenion.antifork.org" target="_blank">http://xenion.antifork.org</a></a> </li><li>rtpbreak home: <a name="tex2html3" href="http://xenion.antifork.org/rtpbreak" title="tex2html3"><a href="http://xenion.antifork.org/rtpbreak" target="_blank">http://xenion.antifork.org/rtpbreak</a></a> </li></ul><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/rtp/" rel="tag">rtp</a> , <a href="http://yfyfj.cn/go.php/tags/%25E5%2588%2586%25E6%259E%2590/" rel="tag">分析</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/read.php/40.htm</link>
<title><![CDATA[SS7信令协议栈，MTP1，MTP2，MTP3，SCCP，TCAP，ISUP，TUP ]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Wed, 06 Aug 2008 08:18:56 +0000</pubDate> 
<guid>http://yfyfj.cn/read.php/40.htm</guid> 
<description>
<![CDATA[ 
	<div><p align="center"><strong><span style="color: #ff3333">SS7信令协议栈，MTP1，MTP2，MTP3，SCCP，TCAP，ISUP，TUP </span></strong></p><p><strong>3.1 SS7信令协议栈</strong></p><p>　　协议是通过网络传送数据的规则集合。 协议栈也就是协议的分层结构，协议分层的目的是为了使各层相对独立，或使各层具有不同的职能。SS7协议一开始就是按分层结构的思想设计的，但SS7协议在开始发展时，主要是考虑在数字电话网和采用电路交换方式的数据通信网中传送各种与电路有关的信息，所以CCITT在80年代提出的SS7技术规范黄皮书中对SS7协议的分层方法没有和OSI七层模型取得一致，对SS7协议只提出了4个功能层的要求。这4个功能层如下： </p><p></p><ul><li>物理层：就是底层，具体是DS0或V.35。 </li><li>数据链路层：在两节点间提供可靠的通信。 </li><li>网络层：提供消息发送的路由选择.。 </li><li>用户部份／应用部份：就是数据库事务处理，呼叫建立和释放。 </li></ul><p>　　但随着综合业务数字网（ISDN）和智能网的发展，不仅需要传送与电路有关的消息，而且需要传送与电路无关的端到端的消息，原来的四层结构已不能满足要求。在1984年和1988年的红皮书和蓝皮书建议中，CCITT作了大量的努力，使SS7协议的分层结构尽量向OSI的七层模型靠近。 </p><p>下图图示了SS7信令协议栈： </p><p></p><p align="center"></p><p align="center"><img src="http://www.ctiforum.com/train/cttech/ss7/SS7_005t-01.gif" border="0" width="302" height="181" /></p><p></p><p align="left"></p><p align="left"></p><blockquote>MTP1(消息传递部分第一层)：即物理层。<br />MTP1(消息传递部分第二层)：即数据链路层。<br />MTP1(消息传递部分第三层)：即网络层。 <br />SCCP（信令连接控制部分） <br />TCAP（事务处理应用部分）<br />ISUP（ISDN用户部分）<br />TUP（电话用户部分） </blockquote><p></p><p></p><p></p><p></p><ul><li>MTP1 <br />　　MTP1是SS7协议栈中的最底层，对应于OSI模型中的物理层，这一层定义了数字链路在物理上，电气上及功能上的特性。物理接口的定义包括：E－1，T－1，DS－1，V.35,DS－0，DS －0A（56K）。 </li></ul><p></p><p></p><ul><li>MTP2 <br />　　MTP2确保消息在链路上实现精确的端到端传送。MTP2提供流控制，消息序号，差错检查等功能。当传送出错时，出错的消息会被重发。MTP2对应OSI模型中的数据链路层。 </li></ul><p></p><p></p><ul><li>MTP3<br />　　MTP3在SS7信令网中提供两个信令点间消息的路由选择功能，消息在依次通过MTP1，MTP2，MTP3层之后，可能会被发送回MTP2再传向别的信令点，也可能会传递给某个应用层，如：SCCP或ISUP层。MTP3还提供一些网管功能的支持，包括：流量控制，路由选择和链路管理。MTP3对应OSI模型中的网络层。 </li></ul><p></p><p></p><ul><li>SCCP（信令连接控制部分）<br />　　SCCP位于MTP之上，为MTP提供附加功能，以便通过SS7信令网在信令点之间传递电路相关和非电路相关的消息，提供两类无连接业务和两类面向连接的业务。 无连接业务是指在两个应用实体间，不需要建立逻辑连接就可以传递信令数据。面向连接的业务在数据传递之前应用实体之间必须先建立连接，可以是一般性的连接，也可以是逻辑连接。 SCCP以全局码（GT）的形式扩展SS7协议的寻址能力和路由能力，这些扩展基于被叫号码的寻址信息。 </li></ul><p></p><p></p><ul><li>TCAP（事务处理应用部分）<br />　　TCAP允许应用调用远端信令点的一个或多个操作，并返回操作的结果。比如：数据库访问或远端调用处理命令等。使用SCCP无连接业务（基本的或有序的），TCAP 在两个用户应用之间提供事务处理对话。 </li></ul><p></p><p></p><ul><li>ISUP（ISDN用户部分）<br />　　ISUP在交换局提供基于电路的连接，它直接和MTP3层通信。 ISUP提供基础电信业务，包括连接建立，监示和释放。 </li></ul><p></p><p></p><ul><li>TUP（电话用户部分）<br />　　在ITU－TS标准里，TUP和ISUP功能相似，提供相似的业务（如：呼叫建立和拆除）。TUP提供的业务比ISUP少，不支持ISUP中某些业务类别，比如：非话音业务和补充业务，还有，TUP不传递与电路无关的消息包。 </li></ul><p></p><ul><li>TUP与ISUP比较 <ul><li>应用范围：TUP主要用于南美洲，墨西哥，亚洲和东欧国家。而ISUP用于其他地方的国家。 </li><li>ISUP比TUP提供更丰富的业务，特别是非话音数字业务。 </li><li>TUP和ISUP都提供快速的呼叫建立和拆除；都在呼叫请求消息里包含主叫号码。 </li></ul><p></p></li></ul><p>　　总的来说，TUP和ISUP的基本功能相同，ISUP能提供更多的业务，它们分别在不同的国家得到了应用。 </p></div><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/ss7/" rel="tag">ss7</a> , <a href="http://yfyfj.cn/go.php/tags/isup/" rel="tag">isup</a>
]]>
</description>
</item><item>
<link>http://yfyfj.cn/read.php/9.htm</link>
<title><![CDATA[电信“我的e家“赠送的无线modem设置路由办法]]></title> 
<author>忆风 &lt;web@web.com&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Wed, 28 May 2008 07:47:17 +0000</pubDate> 
<guid>http://yfyfj.cn/read.php/9.htm</guid> 
<description>
<![CDATA[ 
	在新家那边搜索到很多个ssid为ar7wrd的无线信号，而且还没有设置密码，连接上去还是不能上网。 所以在网上搜索了一番。<br />发现这个是电信&quot;我的e家&quot;赠送的无线modem， 默认情况下是不能路由上网， 就算连接上去了，也需要自己pppo来拨号上网的。<br /><br />在网上找了些资料：<br /><br />网上很多网友都抱怨这是电信为了防止使用路由修改而成&ldquo;阉割猫&rdquo;，但我在看这款猫的说明书时，在最后一页发现了这样一段说明：<br />&nbsp; <div class="quote"><div class="quote-title"><div class="quote"><div class="quote-title">引用</div><div class="quote-content">引用 &ldquo;本手册面向普通用户使用，用户名：user；密码：user。如果您需要以&ldquo;管理者&rdquo;的身份登陆，请咨询当地的电信服务商。&rdquo; 呵呵，破绽就在这里。开始的时候，我用user身份登陆尝试启用路由，页面老是出错。在看见这样的一句描述后，马上上网搜了一份原厂的说明书。发现原厂说明书上，用户名和密码都是admin，而电信所给的说明书却是user。哈哈，果然上在这上面做了手脚～。</div></div><br /><br />下面把开启路由以及端口映射的方法总结一下：<br /><br />1、登陆modem的设置界面：<br />Step 1：打开浏览器，在地址栏中键入：192.168.1.1<br />Step 2：输入用户名&ldquo;admin&rdquo;，密码&ldquo;admin&rdquo; 。（注意，不要使用电信说明书上的&ldquo;user&rdquo;身份登陆，改身份无法开启路由）<br /><br /><div style="overflow-x: auto; width: 100%"><a rel="lightbox" href="http://www.samgo.com.cn/uploads/200703/15_000822_6307mpwii_00.gif" target="_blank"><img src="http://www.samgo.com.cn/uploads/200703/15_000822_6307mpwii_00.gif" border="0" width="550" height="283" /></a></div><br /><br />2、启用路由功能：<br />进入管理界面后，点击&ldquo;<strong>工具</strong>&rdquo;－－&ldquo;<strong>管理员设置</strong>&rdquo;－－把&ldquo;<strong>启用路由功能</strong>&rdquo;后面的框框打上勾。<br /><br /><div style="overflow-x: auto; width: 100%"><a rel="lightbox" href="http://www.samgo.com.cn/uploads/200703/15_000831_6307mpwii_01.gif" target="_blank"><img src="http://www.samgo.com.cn/uploads/200703/15_000831_6307mpwii_01.gif" border="0" width="550" height="386" /></a></div><br /><br />3、路由详细设置：<br />Step 1：点击&ldquo;<strong>快速设置</strong>&rdquo;，删除原厂设置的&ldquo;<strong>Bridge_8_35</strong>&rdquo;连接。（不删除这个连接会提示不能设置！）<br /><br /><div style="overflow-x: auto; width: 100%"><a rel="lightbox" href="http://www.samgo.com.cn/uploads/200703/15_000838_6307mpwii_02.gif" target="_blank"><img src="http://www.samgo.com.cn/uploads/200703/15_000838_6307mpwii_02.gif" border="0" width="550" height="369" /></a></div><br /><br />Step 2：删除后点击&ldquo;<strong>新建连接</strong>&rdquo;，重新建立一个&ldquo;Bridge_8_35&rdquo;连接。详细设置见下图：<br /><br /><div style="overflow-x: auto; width: 100%"><a rel="lightbox" href="http://www.samgo.com.cn/uploads/200703/15_000947_6307mpwii_03.gif" target="_blank"><img src="http://www.samgo.com.cn/uploads/200703/15_000947_6307mpwii_03.gif" border="0" width="550" height="384" /></a></div><br /><br />4、保存并重启：<br />点击&ldquo;<strong>工具</strong>&rdquo; &rarr; &ldquo;<strong>系统命令</strong>&rdquo; ，先点击 &ldquo;<strong>全部保存</strong>&rdquo;，保存成功后点击&ldquo;<strong>重新启动</strong>&rdquo;。<br /><br /><div style="overflow-x: auto; width: 100%"><a rel="lightbox" href="http://www.samgo.com.cn/uploads/200703/15_000953_6307mpwii_04.gif" target="_blank"><img src="http://www.samgo.com.cn/uploads/200703/15_000953_6307mpwii_04.gif" border="0" width="550" height="386" /></a></div><br /><br />至此，Modem的路由功能就启用了。Modem重新启动后，就会自动拨号上网了。<br /><br /><span style="color: red">注意：<br />1、启用路由功能以后是不能使用iTV的，请使用iTV的用户不要开启路由功能！<br />2、开启路由功能后，请修改管理员&ldquo;admin&rdquo;的密码！<br /></span><br /></div></div><br/>Tags - <a href="http://yfyfj.cn/go.php/tags/%25E6%2588%2591%25E7%259A%2584e%25E5%25AE%25B6/" rel="tag">我的e家</a> , <a href="http://yfyfj.cn/go.php/tags/%25E7%2594%25B5%25E4%25BF%25A1/" rel="tag">电信</a>
]]>
</description>
</item>
</channel>
</rss>