分析 aMule / eMule 的 server.met 文件

原创 2007年09月19日 21:01:00

前几天 DonkeyServer 被迫关闭了,原来的服务器列表里却不剩几个可用的服务器。连忙找人家 eMule 的服务器列表──server.met,打开一看,二进制的,晕!还好有 spec

#!/usr/bin/perl -w

# server.met ref:
# http://www.amule.org/wiki/index.php/Server.met_file
#

use strict;

my ( $buf, $verify, $servers, $ip, $port, $tags, $tag_type, $tag_name_length,
    
$tag_name, $tag_value_length, $tag_value );
my @ip;
my %tagid = ( 0x01 => "Server name", 0x0b => "Description", 0x0c => "Ping",
    
0x0d => "Fail", 0x0e => "Preference", 0x85 => "DNS", 0x87 => "Max users",
    
0x88 => "Soft files", 0x89 => "Hard files", 0x90 => "Last ping",
    
0x91 => "Version", 0x92 => "UDP flags", 0x93 => "Auxiliary ports list",
    
0x94 => "LowID clients" );
my $output = '';

while ( my $file = shift @ARGV ) {

open FH, "$file" or die "Can't open file: $file ";
binmode FH;

sysread ( FH, $buf, 5 );
$verify, $servers ) = unpack ( "CV", $buf );

# Verify the file
unless ( $verify == 0x0e || $verify == 0xe0 ) {
    
close FH;
    
printf "%02x ", $verify;
    
die "The file: $file is NOT a verified server.met file";
}
else {
    
#print "" . ( "=" x 78 ) . " File: $file ";
    $output .= ( "=" x 78 ) . " File: $file ";
}

# How many servers
#printf "Servers: %d ", $servers;

$output .= sprintf "Servers: %d ", $servers;

for ( my $i = 0$i != $servers$i++ ) {
    
#print '-' x 78, " ";
    $output .= ( '-' x 78 ) . " ";

    
sysread ( FH, $buf, 10);
    ( 
$ip[0], $ip[1], $ip[2], $ip[3], $port, $tags ) = unpack ( "C4vV", $buf );
    
#print "ip: ", join ( ".", @ip ), " ";
    #print "port: $port tags: $tags ";

    $output .= "ip: " . join ( ".", @ip ) . " port: $port tags: $tags ";

    
for ( my $j = 0$j != $tags$j++ ) {
        
sysread ( FH, $buf, 3 );
        ( 
$tag_type, $tag_name_length ) = unpack ( "Cv", $buf );

        
sysread ( FH, $tag_name, $tag_name_length );
        
if ( $tag_name_length == 1 ) {
            
$tag_name = unpack ( "C", $tag_name );
            
$tag_name = $tagid{$tag_name|| sprintf ( "0x%02x", $tag_name );
        }

        
if ( $tag_type == 0x02 ) {      # Is String
            #printf "S[0x%08X] %s: ", sysseek ( FH, 0, 1 ) + 2, $tag_name;

            $output .= sprintf "S[0x%08X] %s: ", sysseek ( FH, 0, 1 ) + 2, $tag_name;

            
sysread ( FH, $buf, 2 );
            
$tag_value_length = unpack ( "v", $buf );
            
sysread ( FH, $tag_value, $tag_value_length );

            
# strip the BOM off
            $tag_value = substr ( $tag_value, 3 ) if ( substr ( $tag_value, 0, 3 ) eq "" );
        }
        
elsif ( $tag_type == 0x03 ) {   # Is Numeric
            #printf "N[0x%08X] %s: ", sysseek ( FH, 0, 1 ), $tag_name;

            $output .= sprintf "N[0x%08X] %s: ", sysseek ( FH, 0, 1 ), $tag_name;

            
sysread ( FH, $buf, 4 );
            
$tag_value = unpack ( "V", $buf );
        }
        
else {                          # Invalid
            printf "Wrong tag type at %08x: %02x ",
                
sysseek ( FH, 0, 1 ) - $tag_name_length,
                
$tag_type;
            
close FH;
            
die;
        }

        
#print "$tag_value ";
        $output .= "$tag_value ";
    }
}

close FH;

}
print $output;

server.met

  • 2014年02月13日 21:55
  • 9KB
  • 下载

amule的服务器列表

在NETWORKS 的ED2K 项填上http://www.gruk.org/server.met.gz 这个!!:)LIST中用下面这些!!http://www.gruk.org/server.me...
  • evane1890
  • evane1890
  • 2007年04月15日 14:48
  • 2708

amule 服务器 使用方法

大多数ed2k的用户都知道网络上有许多虚假,或者说伪装的服务器,它们会向客户端发送没用且有害的数据,从而破坏下载进程。并且,基于一种广泛存 在的错误的观念——“列表中的服务器数量多多益善”,许多用户会...
  • evane1890
  • evane1890
  • 2007年12月12日 01:16
  • 6547

aMule 服务器列表

from:http://nemo2050.spaces.live.com/Blog/cns!E8CBAD79AB611748!430.entryaMule 服务器列表Linux 中使用 aMule 一...
  • chinalinuxzend
  • chinalinuxzend
  • 2008年12月22日 15:35
  • 7983

amule服务器

1.ED2K服务器http://www.emule.org.cn/server.met2.KAD服务器http://upd.emule-security.net/nodes.dat...
  • retinal
  • retinal
  • 2011年01月10日 19:43
  • 416

ubuntu amule安装及提速设置

本文根据网上资料,讲解ubuntu下安装amule,并安装反吸血模块(DLP),进行提速。参考自:foxzenith的博客,Ubuntu的乐园第一部分  安装amule --------------...
  • happyjiahan
  • happyjiahan
  • 2010年11月19日 14:12
  • 4967

转载:使用Amule下载VeryCD资源的方法

1,安装aMulesudo apt-get install amule amule-utils2,设置服务器 在aMule的主页面的Server栏中添加:http://www.emule.org.c...
  • combine123
  • combine123
  • 2010年07月18日 20:30
  • 516

linux下aMule的设置

习惯了迅雷,一下子要用BT和aMule这样的下载软件真是不知所措。BT还好一点,下载种子,用软件打开就OK了,可是aMule这家伙,硬是不会,这对于从来就习惯了aMule的家伙是无法理解的。今天终于成...
  • xiaotengyi2012
  • xiaotengyi2012
  • 2012年07月07日 23:57
  • 625

Ubuntu下Amule

第一部分  安装amule -------------------------------------------    # apt-get install amule    # apt-get in...
  • ljxkey
  • ljxkey
  • 2013年03月28日 01:00
  • 969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分析 aMule / eMule 的 server.met 文件
举报原因:
原因补充:

(最多只允许输入30个字)