在有些终端界面上使用vim当退出vim的时候会自动清屏vim打开显示的内容,这样不方便再次查看和复制文本内容,导致每次都要重复vim打开再查看再关闭。发现在debian,ubuntu的系统中vim会出现这个问题,redhat系列的系统vim没有自动清屏的问题。其实这个问题很好解决,只要在你的.barhrc 文件中写入一行:
export TERM=linux
即可。这样退出当前会话重新登录就会发现vim打开关闭后不会清屏啦。
在有些终端界面上使用vim当退出vim的时候会自动清屏vim打开显示的内容,这样不方便再次查看和复制文本内容,导致每次都要重复vim打开再查看再关闭。发现在debian,ubuntu的系统中vim会出现这个问题,redhat系列的系统vim没有自动清屏的问题。其实这个问题很好解决,只要在你的.barhrc 文件中写入一行:
export TERM=linux
即可。这样退出当前会话重新登录就会发现vim打开关闭后不会清屏啦。
最近需要在windows平台下通过抓包分析工具把http的GET请求地址抓出来,其实在很多应用场景下我们都需要这样类似的工具,比如httpwatch,fiddler,chrome,firefox下的开发者工具,这些都必须绑定到浏览器才能使用,如果我们需要一个可以自定义的抓包分析工具来分析这些http get和post请求,那么我们该怎么做呢? 搜索了一番有python在windows下抓包分析的实现,也有c++原生使用winpcap库来使用,python的兼容性不好不方便部署使用,c++的开发难度系数较大,维护成本较高,最后发现有国外有人介绍说winpcap在c#的封装实现不错,果断去官方网站 http://pcapdotnet.codeplex.com/ 下载了开发包来学习。
官方文档说要装.net framework 4.0 和winpcap 4.1.2 其实在自己的开发环境中我选用的是.net framework 4.5版本和winpcap 4.1.3 都是可以兼容的。下载的开发包中已经涵盖了官网上介绍的一些示例代码。只要在vs中打开工程进行编译生成就好了。
鉴于官方网站上示例代码非常有限,而且提供的api手册比较粗糙,导致撸主在官网论坛查阅了很长时间那陈旧的帖子内容才得到一些启示。撸主想实现的功能非常简单,就是想不通过浏览器附带的http抓包工具来实现底层的http抓包过滤,例如wireshark中的过滤规则一样可以把我所访问的所有http请求都过滤出来。这样我们只要启用这个小工具,就可以在底层上实现透明抓包,任何通过本机网卡访问的http请求都不会被放过! 废话不多说,放上实现代码:
[code="plain"]
using System;
using System.Collections.Generic;
using PcapDotNet.Core;
using PcapDotNet.Packets;
using PcapDotNet.Packets.IpV4;
using PcapDotNet.Packets.Transport;
using PcapDotNet.Packets.Http;
using System.Text;
namespace InterpretingThePackets
{
class Program
{
static void Main(string[] args)
{
// Retrieve the device list from the local machine
IList allDevices = LivePacketDevice.AllLocalMachine;
if (allDevices.Count == 0)
{
Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
return;
}
// Print the list
for (int i = 0; i != allDevices.Count; ++i)
{
LivePacketDevice device = allDevices[i];
Console.Write((i + 1) + ". " + device.Name);
if (device.Description != null)
Console.WriteLine(" (" + device.Description + ")");
else
Console.WriteLine(" (No description available)");
}
int deviceIndex = 0;
do
{
Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):");
string deviceIndexString = Console.ReadLine();
if (!int.TryParse(deviceIndexString, out deviceIndex) ||
deviceIndex < 1 || deviceIndex > allDevices.Count)
{
deviceIndex = 0;
}
} while (deviceIndex == 0);
// Take the selected adapter
PacketDevice selectedDevice = allDevices[deviceIndex - 1];
// Open the device
using (PacketCommunicator communicator =
selectedDevice.Open(65536, // portion of the packet to capture
// 65536 guarantees that the whole packet will be captured on all the link layers
PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
1000)) // read timeout
{
// Check the link layer. We support only Ethernet for simplicity.
if (communicator.DataLink.Kind != DataLinkKind.Ethernet)
{
Console.WriteLine("This program works only on Ethernet networks.");
return;
}
// Compile the filter
using (BerkeleyPacketFilter filter = communicator.CreateFilter("ip and tcp and dst port 80"))
{
// Set the filter
communicator.SetFilter(filter);
}
Console.WriteLine("Listening on " + selectedDevice.Description + "...");
// start the capture
communicator.ReceivePackets(0, PacketHandler);
}
}
// Callback function invoked by libpcap for every incoming packet
private static void PacketHandler(Packet packet)
{
if (packet == null) { return; }
if (packet.Ethernet == null) { return; }
if (packet.Ethernet.IpV4 == null) { return; }
if (packet.Ethernet.IpV4.Tcp == null) { return; }
if (packet.Ethernet.IpV4.Tcp.Http == null) { return; }
try
{
HttpDatagram http = packet.Ethernet.IpV4.Tcp.Http;
if (http.IsRequest && http.IsValid) {
String msg = http.Decode(Encoding.UTF8).Split('\n')[0];
if (msg.StartsWith("GET ") || msg.StartsWith("POST "))
{
Console.WriteLine(msg);
}
}
}
catch (Exception e)
{
}
}
}
}
[/code]
这里的实现是过滤出访问远端服务器80端口的tcp请求报文,同时截取http头部是get或者post开头的单行字符串。这样我们就可以捕获所有http协议访问的url了。
每个月微软都会发布一些补丁,撸主的台机是windows7 64位版本,最近在更新KB2932677补丁时死活提示安装错误。这个补丁是针对silverlight的,微软官方社区响应还比较快,提供了解决方案:
1. 首先下载http://go.microsoft.com/?linkid=9781197 修复工具来修复silverlight的问题。
2.然后重新下载最新版本的silverlight : http://www.microsoft.com/getsilverlight
3. 最后重新安装KB2932677 补丁即可
再刷新miflash刷机工具,这时候就怎么也无法查询到小米2s主机的连接。于是就怀疑是否是驱动问题的影响,网上有人说要下载小米官方提供的驱动,索性下载更新了几次,驱动程序都显示Fastboot interface (Google USB ID) ,索性手工进入设备管理器,然后选择:
“更新驱动程序软件” -》 “浏览计算机以查找驱动程序软件” -》 “从计算机的设备驱动列表中选取”
此时系统会提示有两个支持硬件的驱动:
可以看到红框选的就是我们当前使用的驱动,这里miflash使用的硬件驱动是“Android ADB Interface” ,不是Fastboot interface!! ,重新选择然后下一步后,我们就可以在miflash中看到我们的小米设备了。