精华内容
下载资源
问答
  • nmap脚本使用总结

    2019-12-02 21:29:51
    0x00 前言:   nmap的基本介绍和基本使用方法,在乌云知识库中已经有人提交过,讲的比较详细,在此文中就不再讲述。 具体链接: ...Nmap也可以显式地指定发送的源端IP地址。使用-S <spoofip>...

    0x00 前言:

     

    nmap的基本介绍和基本使用方法,在乌云知识库中已经有人提交过,讲的比较详细,在此文中就不再讲述。 具体链接:http://drops.wooyun.org/tips/2002

    本文主要讲解nmap的众多脚本的使用,在内网渗透的时候尤其好用。

    Nmap

    nmap -T4 -A -v 192.168.10.100

    nmap -A -v www.baidu.com/24

    nmap -p22 192.168.53.1 -sV

    nmap -p1-65535 192.16.53.1 -sV

    nmap -p5000-6000 192.16.53.1 -sV

    nmap -sV -O -T4 192.168.1.107

    其他使用帮助

     

    Nmap提供的命令行参数如下:
    -sC: 等价于–script=default,使用默认类别的脚本进行扫描 可更换其他类别 
    –script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述
    –script-args=<n1=v1,[n2=v2,...]>: 为脚本提供默认参数
    –script-args-file=filename: 使用文件来为脚本提供参数
    –script-trace: 显示脚本执行过程中发送与接收的数据
    –script-updatedb: 更新脚本数据库
    –script-help=<scripts>: 显示脚本的帮助信息,其中<scripts>部分可以逗号分隔的文件或脚本类别

    0x01 nmap按脚本分类扫描

     

    nmap脚本主要分为以下几类,在扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描:

     

    auth: 负责处理鉴权证书(绕开鉴权)的脚本

    broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务

    brute: 提供暴力破解方式,针对常见的应用如http/snmp等

    default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力

    discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等

    dos: 用于进行拒绝服务攻击

    exploit: 利用已知的漏洞入侵系统

    external: 利用第三方的数据库或资源,例如进行whois解析

    fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽

    malware: 探测目标机是否感染了病毒、开启了后门等信息

    safe: 此类与intrusive相反,属于安全性脚本

    version: 负责增强服务与版本扫描(Version Detection)功能的脚本

    vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067

     

    部分使用截图:

    (1) nmap --script=auth 192.168.137.*

    负责处理鉴权证书(绕开鉴权)的脚本,也可以作为检测部分应用弱口令

     

     

    (2)nmap --script=brute 192.168.137.*

    提供暴力破解的方式  可对数据库,smb,snmp等进行简单密码的暴力猜解

     

    (3)nmap --script=default 192.168.137.* 或者 nmap -sC 192.168.137.*

    默认的脚本扫描,主要是搜集各种应用服务的信息,收集到后,可再针对具体服务进行攻击

     

     

    (4)nmap --script=vuln 192.168.137.*    

    检查是否存在常见漏洞

     

     

     

    (5)nmap -n -p445 --script=broadcast 192.168.137.4

    在局域网内探查更多服务开启状况

     

    (6)nmap --script external 202.103.243.110 

    利用第三方的数据库或资源,例如进行whois解析

     

    0x02 nmap按应用服务扫描

     

    (1)vnc扫描:

    检查vnc bypass

    1

    nmap  --script=realvnc-auth-bypass 192.168.137.4  

     

     

    检查vnc认证方式

    1

    nmap  --script=vnc-auth  192.168.137.4  

    获取vnc信息

    1

    nmap  --script=vnc-info  192.168.137.4  

    (2)smb扫描:

    smb破解

    1

    nmap  --script=smb-brute.nse 192.168.137.4  

    smb字典破解

    1

    nmap --script=smb-brute.nse --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4  

     

    smb已知几个严重漏

    1

    nmap  --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.137.4    

     

    查看共享目录  

    1

    nmap -p 445  --script smb-ls --script-args 'share=e$,path=\,smbuser=test,smbpass=test' 192.168.137.4    

    查询主机一些敏感信息(注:需要下载nmap_service)

    1

    nmap -p 445 -n –script=smb-psexec --script-args= smbuser=test,smbpass=test 192.168.137.4   

     

    查看会话

    1

    nmap -n -p445 --script=smb-enum-sessions.nse --script-args=smbuser=test,smbpass=test 192.168.137.4    

    系统信息

    1

    nmap -n -p445 --script=smb-os-discovery.nse --script-args=smbuser=test,smbpass=test 192.168.137.4  

    (3)Mssql扫描:

    猜解mssql用户名和密码

    1

    nmap -p1433 --script=ms-sql-brute --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4   

     

    xp_cmdshell 执行命令 

    1

    nmap -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="net user" 192.168.137.4      

     

    dumphash值

    1

    nmap -p 1433 --script ms-sql-dump-hashes.nse --script-args mssql.username=sa,mssql.password=sa  192.168.137.4      

     

    (4)Mysql扫描:

    扫描root空口令

    1

    nmap -p3306 --script=mysql-empty-password.nse 192.168.137.4   

     

    列出所有mysql用户

    1

    nmap -p3306 --script=mysql-users.nse --script-args=mysqluser=root 192.168.137.4   

    支持同一应用的所有脚本扫描

    1

    nmap --script=mysql-* 192.168.137.4  

     

    (5)Oracle扫描:

    oracle sid扫描

    1

    nmap --script=oracle-sid-brute -p 1521-1560 192.168.137.5  

     

    oracle弱口令破解

    1

    nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=ORCL,userdb=/var/passwd,passdb=/var/passwd 192.168.137.5      

     

    (6)其他一些比较好用的脚本

    nmap --script=broadcast-netbios-master-browser 192.168.137.4   发现网关

    nmap -p 873 --script rsync-brute --script-args 'rsync-brute.module=www' 192.168.137.4  破解rsync

    nmap --script informix-brute -p 9088 192.168.137.4    informix数据库破解

    nmap -p 5432 --script pgsql-brute 192.168.137.4       pgsql破解

    nmap -sU --script snmp-brute 192.168.137.4            snmp破解

    nmap -sV --script=telnet-brute 192.168.137.4          telnet破解

    nmap --script=http-vuln-cve2010-0738 --script-args 'http-vuln-cve2010-0738.paths={/path1/,/path2/}' <target>  jboss autopwn

    nmap --script=http-methods.nse 192.168.137.4 检查http方法

    nmap --script http-slowloris --max-parallelism 400 192.168.137.4  dos攻击,对于处理能力较小的站点还挺好用的 'half-HTTP' connections 

    nmap --script=samba-vuln-cve-2012-1182  -p 139 192.168.137.4

    (7)不靠谱的脚本:

    vnc-brute    次数多了会禁止连接

    pcanywhere-brute   同上

     

    0x03  学会脚本分析

     

    nmap中脚本并不难看懂,所以在使用时如果不知道原理可以直接看利用脚本即可,也可以修改其中的某些参数方便自己使用。

    举例:

    关于oracle的弱口令破解:

    调用过程:oracle-brute.nse >> oracle-default-accounts.lst

    首先是调用破解脚本:

     

    根据脚本中字典的位置去查看默认字典,当然也可以将破解的字符自行添加其中,或者是修改脚本或参数改变破解字典:

     

    附:

    Nmap在实战中的高级用法

    Nmap提供了四项基本功能(主机发现、端口扫描、服务与版本侦测、OS侦测)及丰富的脚本库。Nmap既能应用于简单的网络信息扫描,也能用在高级、复杂、特定的环境中:例如扫描互联网上大量的主机;绕开防火墙/IDS/IPS;扫描Web站点;扫描路由器等等。

    简要回顾Nmap简单的扫描方式:

     
     
     
     
     
    Default
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
        全面扫描:nmap-T4 -A targetip  
     
        主机发现:nmap-T4 -sn targetip  
     
        端口扫描:nmap-T4 targetip  
     
        服务扫描:nmap-T4 -sV targetip  
     
        操作系统扫描:nmap-T4 -O targetip

    上述的扫描方式能满足一般的信息搜集需求。而若想利用Nmap探索出特定的场景中更详细的信息,则需仔细地设计Nmap命令行参数,以便精确地控制Nmap的扫描行为。

    下面列举比较实用的高级应用场景和技巧。

    1     Nmap高级选项

    1.1  查看本地路由与接口

    Nmap中提供了–iflist选项来查看本地主机的接口信息与路由信息。当遇到无法达到目标主机或想选择从多块网卡中某一特定网卡访问目标主机时,可以查看nmap –iflist中提供的网络接口信息。

    nmap –iflist

     

    1.2  指定网口与IP地址

    在Nmap可指定用哪个网口发送数据,-e <interface>选项。接口的详细信息可以参考–iflist选项输出结果。

    示例:

    nmap -e eth0 targetip

    Nmap也可以显式地指定发送的源端IP地址。使用-S <spoofip>选项,nmap将用指定的spoofip作为源端IP来发送探测包。

    另外可以使用Decoy(诱骗)方式来掩盖真实的扫描地址,例如-D ip1,ip2,ip3,ip4,ME,这样就会产生多个虚假的ip同时对目标机进行探测,其中ME代表本机的真实地址,这样对方的防火墙不容易识别出是扫描者的身份。

    nmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1

    1.3  定制探测包

    Nmap提供–scanflags选项,用户可以对需要发送的TCP探测包的标志位进行完全的控制。可以使用数字或符号指定TCP标志位:URG, ACK, PSH,RST, SYN,and FIN。

    例如,

    nmap -sX -T4 –scanflags URGACKPSHRSTSYNFINtargetip

    此命令设置全部的TCP标志位为1,可以用于某些特殊场景的探测。

    另外使用–ip-options可以定制IP包的options字段。

    使用-S指定虚假的IP地址,-D指定一组诱骗IP地址(ME代表真实地址)。-e指定发送探测包的网络接口,-g(–source- port)指定源端口,-f指定使用IP分片方式发送探测包,–spoof-mac指定使用欺骗的MAC地址。–ttl指定生存时间。

    2     扫描防火墙

    防火墙在今天网络安全中扮演着重要的角色,如果能对防火墙系统进行详细的探测,那么绕开防火墙或渗透防火墙就更加容易。所以,此处讲解利用Nmap获取防火墙基本信息典型的用法。

    为了获取防火墙全面的信息,需尽可能多地结合不同扫描方式来探测其状态。在设计命令行参数时,可以综合网络环境来微调时序参数,以便加快扫描速度。

    SYN扫描

    首先可以利用基本的SYN扫描方式探测其端口开放状态。

    nmap -sS -T4 www.91ri.org

    扫描输出为:

     
     
     
     
     
    Default
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
        All 997 ports are filtered  
     
        PORT    STATE  SERVICE  
     
        80/tcp  open   http  
     
        113/tcp closed auth  
     
        507/tcp open   crs

    我们可以看到SYN方式探测到3个端口开放,而有997个端口被过滤。Nmap默认扫描只扫描1000个最可能开放的端口,如果想扫描全部的端口.

    使用命令nmap -sS -T4-p- www.91ri.org

    FIN扫描

    然后可以利用FIN扫描方式探测防火墙状态。FIN扫描方式用于识别端口是否关闭,收到RST回复说明该端口关闭,否则说明是open或filtered状态。

    nmap -sF -T4 www.91ri.org

     
     
     
     
     
    Default
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        PORT      STATE         SERVICE  
     
        7/tcp     open|filtered echo  
     
        9/tcp     open|filtered discard  
     
        11/tcp    open|filtered systat  
     
        13/tcp    open|filtered daytime  
     
        23/tcp    open|filtered telnet  
     
        25/tcp    open|filtered smtp  
     
        37/tcp    open|filtered time  
     
        79/tcp    open|filtered finger  
     
        80/tcp    open|filtered http  
     
        更多端口,此处省略

    ACK扫描

    然后利用ACK扫描判断端口是否被过滤。针对ACK探测包,未被过滤的端口(无论打开、关闭)会回复RST包。

    nmap -sA -T4 www.91ri.org

    扫描输出为:

     
     
     
     
     
    Default
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Not shown: 997 unfiltered ports  
     
        PORT      STATE    SERVICE  
     
        135/tcp   filtered msrpc  
     
        1434/tcp  filtered ms-sql-m  
     
        32777/tcp filtered sometimes-rpc17

    从结果可以997个端口是未被过滤的(unfiltered),而3个(135/1434/32777)被过滤了。所以,将ACK与FIN扫描 的结果结合分析,我们可以找到很多开放的端口。例如7号端口,FIN中得出的状态是:open或filtered,从ACK中得出的状态是 unfiltered,那么该端口只能是open的。

    Window扫描

    当然也可以利用Window扫描方式,得出一些端口信息,可以与之前扫描分析的结果相互补充。Window扫描方式只对某些TCPIP协议栈才有效。

    window扫描原理与ACK类似,发送ACK包探测目标端口,对回复的RST包中的Window size进行解析。在某些TCPIP协议栈实现中,关闭的端口在RST中会将Window size设置为0;而开放的端口将Window size设置成非0的值。

    nmap -sW -p- -T4 www.91ri.org

    输出结果:

     
     
     
     
     
    Default
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        PORT      STATE    SERVICE  
     
        7/tcp     open     echo  
     
        9/tcp     open     discard  
     
        11/tcp    open     systat  
     
        13/tcp    open     daytime  
     
        更多端口,此处省略

    在采用多种方式获取出防火墙状态后,可以进一步进行应用程序与版本侦测及OS侦测。

    此处不再赘述!91ri.org:小编这里份关于使用nmap突破防火墙的文章 推荐一下《Nmap绕过防火墙&脚本的使用

    3     扫描路由器

    Nmap内部维护了一份系统与设备的数据库(nmap-os-db),能够识别数千种不同系统与设备。所以,可以用来扫描主流的路由器设备。

    3.1  扫描思科路由器

    nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16

    思科路由器会在上述端口中运行了常见的服务。列举出上述端口开放的主机,可以定位到路由器设备可能的IP地址及端口状态。

    3.2  扫描路由器TFTP

    nmap –sU –p69 –nvv target

    大多数的路由器都支持TFTP协议(简单文件传输协议),该协议常用于备份和恢复路由器的配置文件,运行在UDP 69端口上。使用上述命令可以探测出路由器是否开放TFTP。

    3.3  扫描路由器操作系统

    与通用PC扫描方式类似,使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步做OS的指纹分析。

    nmap -O -F -n 192.168.1.1

    4     扫描互联网

    Nmap内部的设计非常强大灵活,既能扫描单个主机、小型的局域网,也可以扫描成千上万台主机从中发掘用户关注的信息。扫描大量主机,需要对扫描时序等参数进行仔细的优化。

    4.1  发现互联网上web服务器

    nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt

    随机地产生10万个IP地址,对其80端口进行扫描。将扫描结果以greppable(可用grep命令提取)格式输出到nmap.txt文件。

    可以使用grep命令从输出文件提取关心的细节信息。

    4.2  统计互联网主机基本数据

      Nmap的创始人Fyodor在2008年的Black Hat大会发表一篇演讲,讲的是如何使用Nmap来扫描互联网(Nmap: Scanning the Internet),资料地址:http://nmap.org/presentations/BHDC08/

      Fyodor进行互联网扫描的初衷是统计出网络经验数据并用之优化Nmap的性能。例如,根据统计出每个端口开放的概率,优先扫描常见端口,以节省用户的时间。

    产生随机IP地址

      产生100万个随机的IP地址,并将之保存到文件中,方便后续扫描时作为参数输入。

    nmap -iR 1200000 -sL -n | grep “not scanned” | awk ‘{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp

    上述命令含义:随机生成1200000个IP地址(-iR 120000),并进行列表扫描(-sL,列举出IP地址,不进行真正的扫描),不进行dns解析操作(-n),这样将产生Nmap列表扫描的结果。在此 结果中搜出未扫描的行(grep “not scanned”),打印出每一行的第二列内容(awk ‘{print $2}’,也就是IP地址),然后对获取到的IP地址进行排序(sort -n),然后剔除重复IP地址,将结果保存到临时文件tp,再取出前1000000个IP地址保存到tcp-allports-1M-IPs文件中,删除 临时文件。

    总之,此处产生了1000000个随机IP地址存放在tcp-allports-1M-IPs文件中。

    优化主机发现

    nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs

    上述命令进行主机发现:使用产生的IP地址(-iL tcp-allports-1M-IPs),指定发送包的源端口为53(–source-port 53,该端口是DNS查询端口,一般的防火墙都允许来自此端口的数据包),时序级别为4(-T4,探测速度比较快),以TCP SYN包方式探测目标机的21,22,23,25,80,113,31339端口,以TCP ACK包方式探测对方80,113,443,10042端口,另外也发送ICMP ECHO/ICMP TIMESTAMP包探测对方主机。只要上述的探测包中得到一个回复,就可以证明目标主机在线。

    完整的扫描命令

    在准备了必要的IP地址文件,并对主机发现参数优化后,我们就得到最终的扫描命令:

    nmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300

    上述命令用于扫描互联网上100万台主机全部的TCP端口的开放情况。

    使用包含100万个IP地址的文件(-iL tcp-allports-1M-IPs),源端IP地址设置为srcip(指定一个IP地址,保证该IP地址位于统一局域网中,否则无法收到目标机的回 复包),主机发现过程使用TCP SYN包探测目标机的21,22,23,25,53,80,443,扫描过程将随机打乱主机顺序(–randomize-hosts,因为文件中的IP 已经排序,这里将之打乱,避免被防火墙检查出),端口扫描过程检查全部的TCP端口(-p-,端口1到65535),使用时序级别为4(-T4,速度比较 快),将结果以XML/grepable/普通格式输出到文件中(-oA logs/tcp-allports-%T-%D,其中%T表示扫描时间,%D表示扫描日期)。

    -d表示打印调试出信息。

    –max-scan-delay 10表示发包最多延时10秒,防止特殊情景下等待过长的时间。

    –max-retries 1,表示端口扫描探测包最多被重传一次,防止Nmap在没有收到回复的情况下多次重传探测包,当然这样也会降低探测的准确性。

    –min-host-group 256表示进行端口扫描与版本侦测时,同时进行探测的主机的数量,这里至少256个主机一组来进行扫描,可以加快扫描速度。

    –min-rate 175和–max-rate 300,表示发包速率介于175和300之间,保证扫描速度不会太慢,也不会因为速率过高引起目标机的警觉。

    扫描结果

    Fyodor组织的此次扫描得出很多重要结论,统计出了互联网最有可能开放的10个TCP端口。

    • 80 (http)
    • 23 (telnet)
    • 22 (ssh)
    • 443 (https)
    • 3389 (ms-term-serv)
    • 445 (microsoft-ds)
    • 139 (netbios-ssn)
    • 21 (ftp)
    • 135 (msrpc)
    • 25 (smtp)

    最有可能开放的10个UDP端口。

    • 137 (netbios-ns)
    • 161 (snmp)
    • 1434 (ms-sql-m)
    • 123 (ntp)
    • 138 (netbios-dgm)
    • 445 (microsoft-ds)
    • 135 (msrpc)
    • 67 (dhcps)
    • 139 (netbios-ssn)
    • 53 (domain)

    5     扫描Web站点

    Web是互联网上最广泛的应用,而且越来越多的服务倾向于以Web形式提供出来,所以对Web安全监管也越来越重要。目前安全领域有很多专门的 Web扫描软件(如AppScan、WebInspect、W3AF),能够提供端口扫描、漏洞扫描、漏洞利用、分析报表等诸多功能。而Nmap作为一款 开源的端口扫描器,对Web扫描方面支持也越来越强大,可以完成Web基本的信息探测:服务器版本、支持的Method、是否包含典型漏洞。功能已经远远 超过同领域的其他开源软件,如HTTPrint、Httsquash。

    目前Nmap中对Web的支持主要通过Lua脚本来实现,NSE脚本库中共有50多个HTTP相关的脚本。

    扫描实例:

    nmap -sV -p 80 -T4 –script http*,defaultscanme.nmap.org

     

      上面以扫描scanme.nmap.org的Web应用展示Nmap提供Web扫描能力,从图中可以看到扫描结果中提供了比较丰富的信息。

    首先是应用程序及版本:Apachehttpd 2.2.14 (Ubuntu)

    然后搜出了该站点的affiliate-id:该ID可用于识别同一拥有者的不同页面。

    然后输出HTTP-headers信息,从中查看到基本配置信息。

    从http-title中,可以看到网页标题。某些网页标题可能会泄漏重要信息,所以这里也应对其检查。

    有想深入学习nmap的也可以参考:《渗透测试工具Nmap从初级到高级》文章

    from:http://blog.csdn.net/aspirationflow/article/details/7983368

    展开全文
  • 同时由于交易所的资产安全,被攻击,对现实金融生态的影响等原因,是很多国家明令禁止的。 3) 当生态中除了TOKEN,还自带钱包后,我认为这个区块链生态才过渡到气态。在气态下,通证和资产的兑换是无处不在,非常...

    1,为什么DAPP生态需要自带钱包功能?

    区块链是一个伟大的发明,它改变了生产关系。很多生态,有了区块链技术,可以由全公司员工的"全员合伙人"变成了全平台的”全体合伙人”了,是真正的共享经济模式。

    什么意思呢?举例来说,现在很多互联网平台,比如淘宝,普通消费者只是一个利益贡献者,这个平台运营的好不好跟用户没有关系。但在有代币的平台上,每一个用户的角色都发生了转变:他们不单单是某个平台的用户,还持有了它的代币。这些代币一般都是有限的,使用这个平台的人数越多,代币的需求就会越旺盛,代币在市场上供需就会倾斜,就会涨价。所以这时候用户跟平台方,其实是站在同一边的。也就是说,在+互联网时代,通过使用互联网技术提升信息流通效率后,消费者培养了淘宝这个独角兽平台,但是这个受益主要被马云团队享受,创造了一个中国首富,平台的广大用户并没有得到平台增长红利的好处。但是,在+区块链时代,所有的用户都是平台的利益相关方,都是创业者。他们会随着这个平台的增长而一起受益,这个梦想的力量也就会更大。 目前DAPP业务生态中,很多项目不自带钱包或者交易所的。我认为DAPP只带钱包功能将会是一个基本配置。如下图理解, 1) 当生态中没有TOKEN经济时,这个平台是固态的,谁是用户,谁是利益平台最终受益方,是静态固化的。这是通用的+互联网模式,海量的用户制造了BATJ等独角兽企业,但他们永远只是贡献者,自身没有从中分享更多的利益。 2) 当生态中包含TOKEN,然后通过上交易所完成利益变换时,我认为这时的生态是液态的。生态中的利益兑换可以通过交易所进行转换。但是这样无法去中心化,无法去中介化,存在着不便捷和被收费的问题。这种模式下,无法形成通证经济的自循环生态。同时由于交易所的资产安全,被攻击,对现实金融生态的影响等原因,是很多国家明令禁止的。 3) 当生态中除了TOKEN,还自带钱包后,我认为这个区块链生态才过渡到气态。在气态下,通证和资产的兑换是无处不在,非常方便的。认同这个平台的管理方和用户方自成循环体系,高效的促进了生态内的资产流通。

    七部委的规定“任何所谓的代币融资交易平台不得从事法定货币与代币、“虚拟货币”相互之间的兑换业务”,说明限制的是中心化交易所的做法,并没有禁止DAPP自带钱包功能。这应该也是鼓励的一种方式,DAPP生态自循环,不会影响现有金融秩序。

    以辉哥看,DAPP自带钱包将会是区块链项目的一个标配功能。

    2,钱包的分类

    2.1 以太坊客户端Ethereum Wallet,Geth,DAPP自带钱包的区别

    1) Ethereum Wallet等应用

    Ethereum Wallet客户端对应的是Mist项目,现在此客户端大多都称为Ethereum Wallet,也有称作Mist客户端的,知道它们两个指的是同一个客户端即可。此客户端使用JavaScript进行开发,支持windows、linux和OSX三类操作系统,是一个图形化操作界面的客户端。介绍到这里,大家可能就明白了,如果你想通过API来调用以太坊的接口,选择此方式是行不通的。 Ethereum Wallet客户端主要是为用户提供可视化操作的客户端,下载安装之后通过相应的图形化界面即可进行创建账户、转账、查询余额等操作。 Ethereum Wallet客户端主要功能: 1] 创建账户 2] 兑换以太币:内置了比特币、其它竞争币与以太币兑换功能 3] 部署智能合约:代币合约、众筹合约、自治组织合约等 4] 以太币转账操作 5] 备份钱包等其他功能 以上所有功能操作都是启动客户端程序之后,通过操作界面或菜单进行操作。智能合约部分需要事先编写好对应的代码,通过客户端进行发布。 属于此类独立钱包APP应用的还有imToken等。

    2)Geth钱包介绍

    Geth是go-ethereum项目的客户端,也是目前使用最广泛的客户端。支持windows、linux和OSX三类操作系统。针对此系统网上有大量的资料可以参考,github上的wiki文档使用说明也比较详细,【点击跳转到文档地址】。通过此客户端可以进行基本所有的以太坊相关操作。

    1] Geth客户端主要功能:

    • JavaScript Console:通过后台进行命令操作;
    • Management API:管理相关的API;
    • JSON-RPC server:JSON-RPC相关调用API 无论通过API或则console都可以进行相关操作,比如:
    • 账号管理(创建账号、锁定账号、解除锁定等);
    • 查询账户信息;
    • 查询交易信息;
    • 查询gasPrice;
    • 交易;
    • 挖矿&停止挖矿;
    • 部署智能合约
    • 等其他相关功能。

    使用Geth客户端可以通过对接API(目前交易平台常常使用的方式),或直接通过命令行进行操作。与Ethereum Wallet相比,没有可视化的操作界面,基本上都是通过命令来完成的。 Geth钱包是Ethereum生态的技术实现的一部分,不是为了给终端用户使用的应用型钱包。

    3)DAPP自带钱包介绍

    DAPP自带钱包是在Geth基础上开发出来的移动端 App或者网页版钱包,例如彩贝APP账号自带的ColorBay通证转账功能的钱包。这个钱包依附于彩贝APP,不能独立存在。

    2.1 中心化钱包和非中心化的区别

    根据私钥存储的位置可分为两类: 1)中心化私钥存储的钱包,比如火币的钱包; 2)去中心化钱包,私钥存储在用户端,比如 imtoken 钱包,彩贝钱包。

    1)去中心化钱包

    去中心化钱包不是本节要讲的重点,这里只给大家简单介绍一下。无论是中心化的钱包或去中心化的钱包,在 App 层面都是很轻量级的,App 内是不会内置一个 Geth 节点,交易的查询或发送都是通过服务器来进行操作,不同点是交易签名的私钥由谁来保管和负责。 去中心化的钱包有个关键词:助记词。可以用下面的表达式来形容助记词的作用:

    私钥 = 助记词 = keystore+密码
    复制代码

    通过上面的公式可以看出助记词的重要作用,也是去中心钱包功能的一个亮点。当在这类钱包中创建一个账户之后,钱包会根据生成的私钥文件,生成一套助记词,可为英文可为中文,通过助记词可以反向计算出 keystore + 密码。助记词由用户手抄存放在安全的地方,当进行交易时,输入助记词对交易进行签名,发送交易。当助记词丢失,也就意味着失去了私钥,而钱包一般不会保存用户的私钥信息,资产将永久丢失。 去中心化钱包的好处是不用担心平台从中作梗,不用担心平台被黑客攻击而导致资产损失,但要求个人有一定的私钥保存能力。

    2) 中心钱包

    所谓中心化钱包就是将所有的私钥文件存储在钱包服务商的服务器内,由服务商来保管这些私钥文件,也就是说资产属于你,但私钥不由你保管。这样做的好处是用户根本不用记住私钥,只用记住在平台所开设的账户、登录密码和支付密码即可。即使忘记了密码,还是可以通过平台提供的忘记密码进行找回,当然,这样就不具有去中心化钱包的优点了。 彩贝钱包属于依附彩贝生态的中心化钱包,帮助彩贝社区完成通证经济的闭环生态建设。

    3,钱包的核心功能

    钱包对外呈现可能有不同的功能,充值、提现、转账等,但从本质上来说只有一个功能,那就是转账。区块链本质上就是一个账本,记录着一笔笔交易,钱包当然离不开这个本质。 具体功能说明: 1)充值是钱包的外部账户向钱包的地址转账; 2)提现是钱包的账户向钱包之外的地址转账; 3)转账功能包括钱包内地址互转和向钱包外地址转账; 在这个过程当中也对应着钱包账户资金的增加与减少。

    3.1 用户地址如何分配

    用户在使用钱包的时候肯定需要有一个属于当前账户对应在区块链上的地址,这个地址如何生成呢?不少开发人员是这样实现的:每次当用户注册时就调用 Geth 节点的personal_newAccount方法生成一个地址,并将地址存放在 Geth 节点默认的位置。这种方式可以实现,但从技术上和安全上来讲是不可取的。 性能瓶颈之一,调用 Geth 节点生成地址非常耗时,特别是当节点在处理一些同步或高消耗的工作时。 性能瓶颈之二,当 Geth 节点下的私钥越来越多,Geth 启动会变得漫长。 安全问题,Geth 节点对外要广播交易,又要保存敏感的私钥信息,安全问题巨大。 **优化之后的做法是事先批量生成地址,当用户注册时只用把地址分配给用户即可。**这样做的好处是: 私钥的存储与 Geth 节点相隔离,确保私钥与外网的隔离性,从而确保私钥的安全; 性能的保障,当用户注册时只是将数据库的数据建立了一个关联,而不用去执行费时的加密算法来生成私钥和文件。 此种方法生成 Web3j 提供了相应的创建方法,可在无 Geth 节点的情况下通过代码直接生成符合私钥规则的公私钥。当然,如果有开发能力也可以通过 Geth 的源代码中的私钥生成方法抽离出一个单独的与网络无关的生产私钥程序。

    3.2 充值交易

    在比特币的钱包中,有子账户的概念,只需要在一个总账户下创建 N 多子账号,用户充值到此子账号的比特币同样的会显示在钱包上,同时又提供了查询一个地址所有交易的方法。遗憾的是以太币并没有提供此类接口,只能通过遍历区块交易的方法来判断是否有对应账户的充值交易。 相关操作: 1)查询区块高度,比对是否是新生成的区块,eth_blockNumber; 2)查看区块内容及详细交易,eth_gethBlockByNumber; 比对交易的 toAddress 是否为本钱包的地址,如果是则记录此笔交易到数据库,并记录交易状态(pending、确认次数等); 3) 保证入库和记账的幂等性,因为会多次查询到同一笔交易。 4)确认次数 并不是我们查询区块链中的交易就说明这边交易已经成功了,比特币是默认确认12此之后,此交易几乎不会被篡改,以太坊默认6次,那么怎么计算确认次数呢?

    确认次数 = 当前区块高度 - 交易所在区块高度 + 1

    此处注意事项:交易有可能会被孤立,在执行此公式时需要验证一下区块中此交易是否还是在那个区块上,是否已经被回滚。同样的,要做好幂等性保障。

    3.3 提现交易

    提现交易同样涉及到上提到的知识点,同时它又有需要额外注意的事项。 提现地址的合法性检查,可参考源代码中的校验,此合法性检查可以避免后续很多问题的出现,比如 nonce 值的维护。 交易的金额检查,nonce 值检查,特别是私钥与 Geth 节点分离之后自己来维护私钥时 nonce 值会是一个很大的问题,比如前一笔交易失败,nonce 值需要回退,此时后一笔交易已经发出,因为前一笔 nonce 没有被补齐,后一笔迟迟不会被交易。这些都需要业务进行特殊判断和处理。 查询一个地址 nonce,eth_getTransactionCount。

    3.4 提现与转账

    提现与转账都是发起一笔交易,在以太坊的 json-rpc 中已经提到可以通过 eth_sendTransaction 和 personal_sendTransaction 直接进行转账,这是 Geth 节点所支持的。转账前可以通过 unlock 方法先将账户解锁,这些之前章节都有提到过。 但针对私钥单独存储的情况,上面的方式并不适用,可通过将交易先签名再广播的模式:

    • 签名交易(可自主开发,可利用节点本身),eth_sign。
    • 广播交易,可通过 eth_sendRawTransaction 进行广播。
    • 钱包的内部转账只不过是 from 和 to 地址都是钱包的地址而已,业务层进行适当的处理。 通过这种模式,节点与外界打交道,仅有的功能就是广播交易,在此之前的所有操作都可以通过内网进行操作,极大的确保的私钥和交易的安全性。

    更多功能查看官网的go-ethereum GETH钱包[RPC,API]链接。

    4,实现WEB WALLET钱包分配和转账功能

    4.1 库模块介绍

    创建DAPP 钱包或者PC WEB钱包,需要在Geth基础上实现功能。本章介绍2个库模块,降低钱包实现的难度。

    4.1.1 Hooked-web3-Provider模块

    Hooked-web3-Provider模块库(官网地址)提供自定义程序提供方(custom provider),它使用HTTP与geth通信。这个提供方的独特之处在于,它允许使用密钥签署合约实例的sendTransation()调用,因此不再需要创建交易的数据部分了。自定义程序提供方实际上重写了web3.eth.sendTransaction()方法的实现,所以基本上它允许签署合约实例的sendTransaction()调用以及web3.eth.sendTransation()调用。合约实例的sendTransaction()方法在内部生成交易数据,并调用web3.eth.sendTransation()广播交易。

    4.1.2 LightWallet模块

    LightWallet是一个实现BIP32,BIP39和BIP44(官网地址)的HD钱包。LightWallet提供API来创建和签署交易,或者使用LightWallet生成的地址和密钥加密和解密数据。 LightWallet API被分成4个命名空间,即keystore、signing、encryption和txutils。signing、encrpytion和txutils分别用来提供API以签名交易,非对称的密码和创建交易,而keystore命名空间用于创建keystore、生成种子等。keystore是一个存储加密种子和密钥的对象。如果使用Hooked-Web3-Provider,keystore命名空间实现交易签名者方法,该方法要求签署we3.eth.sendTransation()调用。因此keystore命名空间对于在其中发现的地址可以自动创建和签署交易。实际上,LightWallet的主要目的是成为Hooked-Web3-Provider的一个签名提供方。 可以配置密钥存储实例,来创建和签署交易或者加密和解密数据。签署交易用secp256k1参数,加密和解密用curve25519参数。 LightWallet的种子是一个12词的助记符,容易记住但不容易进行破解。它不是任意12个词,而是LightWallet生成的种子。LightWallet生成的种子在选择词和其他东西方面有特定的属性。

    4.2 重点代码介绍

    此环境代码部署在辉哥的Ubuntu虚拟机上测试成功。如果不懂如何安装Ubuntu虚拟机的,可参考《第一课 如何在WINDOWS环境下搭建以太坊开发环境》文章完成配置。

    4.2.1 代码结构分析

    WebWallet钱包目录主要有以下文件和目录,各目录功能描述解释如下: WebWalletapp.js -管理整个应用的App对象 │ package.json -环境配置文件 ├─node_modules -Nodeb.js库模块,不做修改 │
    └─public ├─cssbootstrap.min.css -前端排版文件 │
    ├─htmlindex.html - 前端主页 │
    └─js hooked-web3-provider-Formatted.min.js - 格式化可读的“hooked-web3-provider.min.js”文件,供阅读参考 hooked-web3-provider.min.js - 实现hooked-web3-provider功能库文件 lightwallet-Formatted.min.js - 格式化可读的“lightwallet.min.js”文件 lightwallet.min.js - 实现lightwallet功能库文件 main.js - 本案例实现主要函数 web3.min.js -web3.js的实现文件

    4.2.2 重点代码解读

    重点实现代码在main.js文件中。 1, generate_seed函数代码

    function generate_seed()
    {
    	/*产生12个单词的助记词*/
    	var new_seed = lightwallet.keystore.generateRandomSeed();
    
    	document.getElementById("seed").value = new_seed;
    
            /*产生钱包地址*/
    	generate_addresses(new_seed);
    }
    复制代码

    generate_seed函数功能: 调用lightwallet函数产生seed助记词,产生钱包地址。

    2, generate_addresses函数代码

    function generate_addresses(seed)
    {
    	if(seed == undefined)
    	{
    		/*读取输入框的助记词*/
    		seed = document.getElementById("seed").value;
    	}
    
      /*判断是否是有效的助记词*/
    	if(!lightwallet.keystore.isSeedValid(seed))
    	{
    		document.getElementById("info").innerHTML = "Please enter a valid seed";
    		return;
    	}
    
      /*需要产生多少个地址*/
    	totalAddresses = prompt("How many addresses do you want to generate");
    
      /*获取地址数量*/
    	if(!Number.isInteger(parseInt(totalAddresses)))
    	{
    		document.getElementById("info").innerHTML = "Please enter valid number of addresses";
    		return;
    	}
    
      /*随机产生密码*/
    	var password = Math.random().toString();
    
      /*创建并显示地址,私钥和账户余额*/
    	lightwallet.keystore.createVault({
    		password: password,
    	  	seedPhrase: seed
    	}, function (err, ks) {
    		  /*以用户密码作为输出,产生的Uint8类型的数组的对称密钥,这个密钥用于加密和解密keystore*/
    	  	ks.keyFromPassword(password, function (err, pwDerivedKey) {
    	    	if(err)
    	    	{
    	    		document.getElementById("info").innerHTML = err;
    	    	}
    	    	else
    	    	{
    	    		/*通过seed助记词密码在keystore产生totalAddresses个地址/私钥对。这个地址/私钥对可通过ks.getAddresses()函数调用返回*/
    	    		ks.generateNewAddress(pwDerivedKey, totalAddresses);
    	    		var addresses = ks.getAddresses();	
    	    		
    	    		/*【注意】为了能在其他PC浏览器能够访问,此处IP要改为UBUNTU所在的GETH环境的IP*/
    	    		//var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
    	    		var web3 = new Web3(new Web3.providers.HttpProvider("http://192.168.0.106:8545"));
    
    	    		var html = "";
    
    					/*组装地址/私钥对为HTML,以便显示*/
    	    		for(var count = 0; count < addresses.length; count++)
    	    		{
    					var address = addresses[count];
    					/*根据地址和pwDerivedKey生成私钥*/
    					var private_key = ks.exportPrivateKey(address, pwDerivedKey);
    					/*获取余额*/
    					var balance = web3.eth.getBalance("0x" + address);
    
    					html = html + "<li>";
    					html = html + "<p><b>Address: </b>0x" + address + "</p>";
    					html = html + "<p><b>Private Key: </b>0x" + private_key + "</p>";
    					html = html + "<p><b>Balance: </b>" + web3.fromWei(balance, "ether") + " ether</p>";
    		    		html = html + "</li>";
    	    		}
    
    	    		document.getElementById("list").innerHTML = html;
    	    	}
    	  	});
    	});
    }
    复制代码

    generate_seed函数功能说明: 根据助记词和需要的地址数量产生账户地址,并显示出来。 【说明】lightwallet实现了相同的SEED可以产生相同的账户地址。

    3. send_ether函数代码

    function send_ether()
    {
    	var	seed = document.getElementById("seed").value;
    
      /*seed是否有效?*/
    	if(!lightwallet.keystore.isSeedValid(seed))
    	{
    		document.getElementById("info").innerHTML = "Please enter a valid seed";
    		return;
    	}
    
    	var password = Math.random().toString();
    
    	lightwallet.keystore.createVault({
    		password: password,
    	  	seedPhrase: seed
    	}, function (err, ks) {
    		  /*以用户密码作为输出,产生的Uint8类型的数组的对称密钥,这个密钥用于加密和解密keystore*/
    	  	ks.keyFromPassword(password, function (err, pwDerivedKey) {
    	    	if(err)
    	    	{
    	    		document.getElementById("info").innerHTML = err;
    	    	}
    	    	else
    	    	{
    	    		ks.generateNewAddress(pwDerivedKey, totalAddresses);
    
    	    		ks.passwordProvider = function (callback) {
    			      	callback(null, password);
    			    };
    			    
    			    /*【注意】为了能在其他PC浏览器能够访问,此处IP要改为UBUNTU所在的GETH环境的IP*/
              /*新建HookedWeb3Provider, 参考https://www.npmjs.com/package/hooked-web3-provider*/
    					/**
    			    var provider = new HookedWeb3Provider({
      					host: "http://localhost:8545",
      					transaction_signer: ks*/
      				var provider = new HookedWeb3Provider({
      					host: "http://192.168.1.135:8545",
      					transaction_signer: ks  					
    				});
    
              /*以HookedWeb3Provider为对象产生web3,
                不同于宠物商店案例的new Web3.providers.HttpProvider('http://localhost:8545');*/
    			    var web3 = new Web3(provider);
    
    			    var from = document.getElementById("address1").value;
    				var to = document.getElementById("address2").value;
    			    var value = web3.toWei(document.getElementById("ether").value, "ether");
    
              /*从源地址钱包向目标地址钱包发送value的以太币*/
    			    web3.eth.sendTransaction({
    			    	from: from,
    			    	to: to,
    			    	value: value,
    			    	gas: 21000
    			    }, function(error, result){
    			    	if(error)
    			    	{	
    			    		document.getElementById("info").innerHTML = error;
    			    	}
    			    	else
    			    	{
    			    		document.getElementById("info").innerHTML = "Txn hash: " + result;
    			    	}
    			    })
    	    	}
    	  	});
    	});
    }
    复制代码

    send_ether函数功能说明: 该函数实现ETH转账功能。 【说明】为了在你的测试机上可以跑通代码,一定注意修改IP地址为代码所在的机器IP。

    5,WEB WALLET钱包功能测试

    因为辉哥在本地配置的Ubuntu虚拟机屏幕比较小,采用使用Xshell 4进行SSH远程登录的方式,采用本地windows chrome浏览器的方式进行演示的方式。各位看官也可以直接在Ubuntu上操作的方式完成。 Ubuntu机器的ip地址为“192.168.1.135”,相关的main.js的2处IP地址也改为了“192.168.1.135”,并更新部署到Ubuntu工作目录下。 ##5.1 启动GETH开发实例 启动Ubuntu远程连接后,窗口输入命令用于运行GETH环境。

    geth --dev --rpc --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcport "8545" --mine --unlock=0 --datadir testNet console 2>> test.log

    针对GETH的命令参数稍作解释,具体参考文章《第五课 以太坊客户端Geth命令用法-参数详解》说明: 1) --dev表示启动开发环境; 2)--rpc表示启用HTTP-RPC服务器; 3)--rpccorsdomain "*"表示用于允许一些特定域与geth通信。*通配符表示可与任何域名通信。 4)--rpcaddr "0.0.0.0" 表示geth服务器可以到达哪个IP地址。默认的是127.0.0.1。将它的值改为0.0.0.0,这表示该服务器可以使用任何IP地址到达。 5) --rpcport "8545" 表示HTTP-RPC服务器监听端口(默认值:8545) 6) --mine表示打开挖矿 1) --unlock=0表示解锁账号0,geth默认创建的账户,命令启动后系统提示“Passphrase:”回车输入密码为空后即可解锁账号0。 运行成功后,输入“eth.accounts”可以看到geth自动创建的一个默认账户地址为“0x5eaba24091f993917fb35188add523c501dc1354”。

    5.2 启动APP服务

    在XShell 4新开一个窗口链接,进入到辉哥工程目录~/work/WebWallet,然后启动本APP。

    node app.js

    操作截图如下:

    5.3 Web Wallet基本功能操作

    1. 打开WEB钱包网址

    2. 点击"Generate New Seed"产生种子 点击"Generate New Seed"按钮,输入需要产生子账户地址个数,例如2个,
    界面上显示产生的助记词seed和对应的账户信息:
    记录下相关信息:

    1. SEED:obtain warm allow bicycle mushroom fiber shell tower twenty corn cherry close
    2. Address1: 0xe45d865ed260fdf2409f66d4a9499a664943079c
    3. Address2: 0x09da12a3c1e0675c29e14967a3be765b008205e4

    3. 给目标地址发送ETH 回到geth环境,从系统账户account[0]给目标账户地址打100个ETH。

    eth.sendTransaction({from: '0x5eaba24091f993917fb35188add523c501dc1354', to: '0xe45d865ed260fdf2409f66d4a9499a664943079c', value: web3.toWei(100, "ether")})

    操作截图如下:

    4. 查看目标地址信息 点击主页的"Generate Details"按钮,可以刷新账户信息。LightWallet库函数中,只要是相同的seed,产生的账户地址是相同的。 点击查看,可以发现目标账户地址"0xe45d865ed260fdf2409f66d4a9499a664943079c"收到了100个ETH。
    5. 钱包内账户转账 目标:从第一个账户地址“0xe45d865ed260fdf2409f66d4a9499a664943079c”转发9个ETH到第二个账户地址“0x09da12a3c1e0675c29e14967a3be765b008205e4”

    执行成功会更新提示Txn hash值。
    此时点击下“Generate Detail”按钮,发现2个账户余额发生了9个ETH的变化。

    至此,把DAPP应用中,为什么需要钱包功能,钱包功能的分类,一个演示基本的钱包实现基本讲明白了。需要学习更多内容可参考官网接口文档和说明。 #6. 知识对接服务 我们在知识星球开通了区块链入门专栏,用于存放本项目的工程源码等内容,并建立专项微信群用于技术交流,欢迎加入。

    7,参考资料

    1,ethereumjs-tx www.npmjs.com/package/eth… Github代码: github.com/ethereumjs/… 2,hooked-web3-provider www.npmjs.com/package/hoo… Github代码: github.com/consensys/h… 3,web端钱包源码 1)eth web: github.com/ConsenSys/e… 2).android: github.com/walleth/wal… 3).IOS: github.com/ethers-io/E… 4,WEB3.JS完整文档 github.com/ethereum/wi… WEB3.JS代码 github.com/ethereum/we… 5,go-ethereum GETH钱包[RPC,API] github.com/ethereum/go… 6,以太坊钱包的开发 blog.csdn.net/u011494083/… blog.csdn.net/u011494083/… github.com/ethereum/wi… 7,第08课:开发以太坊钱包的基本思路与安全[中心化钱包和去中心化钱包讲的不错] blog.csdn.net/su_bo_2010/… 8,以太坊客户端Ethereum Wallet与Geth区别简介 blog.csdn.net/wuxianbing2… 9,[以太坊源代码分析] V. 从钱包到客户端 blog.csdn.net/teaspring/a… 10,【区块链开发】从零构建基于以太坊(Ethereum)钱包Parity联盟链 ke.qq.com/course/2546… 11,基于以太坊的电子钱包开发分析 mp.weixin.qq.com/s/YQNlYozCv… 12,《区块链项目开发指南》- Narayan Prusty[India] 13,BIP32,BIP39协议-关于HD钱包和助记种子规范 github.com/bitcoin/bip… 14,格式化JS工具 tool.oschina.net/codeformat/… 15,第03课:以太坊常见 JSON-RPC 接口解析 blog.csdn.net/su_bo_2010/…

    转载于:https://juejin.im/post/5bed0e6ce51d450e6f663d8d

    展开全文
  • 虽然亚马逊已经明令禁止卖家通过礼品卡的形式来向买家索取好评,但其实只要把握分寸,亚马逊是没办法管的。 这里就教大家如何把握分寸。首先是小礼物是一般是准备同类产品/产品周边/刚需用品,这样的礼物最得买家...

    测评是做跨境电商的卖家不可能不经历的事情。但是测评行业水深大家都知道,那么,作为卖家,如何安全的测评呢?今天我们就来聊聊如何送测?安全测评需要注意什么?(PS:不想看上面科普的朋友,可以滑到最底下,就可以看到自养买手号的实操教程了)

    首先,我们打开亚马逊上的一个商品页面,滑到下面,我们会发现,有几种评价的类型。一种是有Verified Purchase(VP),也就是真实购买后的评论;还有一种是直评,就是没有购买的直接评论,亚马逊允许这种评论的存在,但这种评价不会计入产品平均分;第三种就是Vine Voice,这种评价是有专门的评论人点评的,这种评价可信度更高、权重也更高。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    聊完了几种评价形式,我们来讲讲送测方法。送测有这几种方式:Vine Voice、早期评论者计划、真实买手、自养买手

    1.自养买家号
    自养买家号就是由卖家自己培养多个买家的账号,然后给自己的产品刷好评。这种方法最难的就是如何让亚马逊认为这些账号是一个真实的买家。
    最重要的是,我们需要给每个账号单独的当地网络环境。

    2.真实买手·礼物+售后卡
    这个通过礼物和售后卡内容,鼓励真实的买家留评论甚至是留好评的方法。虽然亚马逊已经明令禁止卖家通过礼品卡的形式来向买家索取好评,但其实只要把握分寸,亚马逊是没办法管的。
    这里就教大家如何把握分寸。首先是小礼物是一般是准备同类产品/产品周边/刚需用品,这样的礼物最得买家喜爱。然后是卡片,千万不要准备礼品卡,而是设计一张售后服务卡,上面的内容也是售后服务有关的信息,然后再卡片中随意的提到请买家给“Honest Unbiased Review”真实中肯的评价。(千万不要直接要好评,很容易被买家挂出来)这样可以提高买家的留评率,并且只要你产品不算太烂,大多数买家是不会给差评的。

    3.Vine Voice
    这种测评方式就是加入亚马逊的VE后,通过免费送产品去获得可信度更高,权重更高的评论。Vine 评论由Vine Voice独立提出,卖家不能影响、修改或编辑。Vine Voice的review相对普通的review权重会更高。
    Vine评论非常真实,不会因为免费产品就给你很高的评分,但是Vine评论非常安全,提升产品排名的速度也很快。所以,如果你对你的产品十分有自信,不担心会有很多买家打差评,又十分注中账号安全,就可以选择它。

    4.AERP早期评论人计划
    这个和Vine评价很像,可以在亚马逊后台直接打开。亚马逊会随机邀请买家购买产品,并给参与评论的人$1-3美金的优惠券。这个的费用是$60美金/产品。评价者会同样会提供最真实的评价。如果你对自己的产品很有信心,就可以做这个早期评论者计划,早期的时候可以快速又安全的得到一些评价。

    【Vine Voice与AERP早期评论人计划的区别对比图】

    在这里插入图片描述

    上面讲的4种方法,早期评论人计划和Vine Voice虽然非常安全,但是成本过于高昂,评论的数量也会被限制;而通过礼物+售后卡的方式让真实买手给评价,成本也是不低,并且有一定的操作难度,如果卖家没有把握好分寸,很容易被买家举报。所以相比而言,自养买家号,才是最最经济实惠又靠谱的方法。

    【自养买家号·亚马逊美国站·实操教程】
    下面,我们就来实操一下如何安全的注册多个自养买家号,开启养号的第一步!
    首先,我们要先保证我们的每个账号的注册环境独立的网络环境,并且这个网络环境是美国的。所以在这里会用到AdsPower这个工具,保证我的账号有安全稳定的网络环境。(之前也用过同类的产品 Multilogin,但单价格实在太高了,后来选用AdsPower的团队协作版,价格平均4元/账号/月,是Multilogin的一半还不到非常适合我们这些小小团队)那么我们开始实操:

    第一步:打开AdsPower软件,录入我们准备好的IP地址与不同账号信息。
    在这里插入图片描述

    第二步:录入好多个账号后,在管理页面选择打开。

    第三步:同时打开多个浏览器,一打开直接是亚马逊美国站的官网。
    在这里插入图片描述

    第四步:在不同的浏览器中点击注册。用每个浏览器对应的信息进行注册。在这里插入图片描述

    录入完信息后就完成注册啦!之后想操作这些账号,直接打开目标账号对应的浏览器,那么,登陆了目标账号的亚马逊网站就会自动打开,可以在里面安心的养好了。

    展开全文
  • 对象属性2.1 主机名2.2 客户端标示符2.3 状态值2.4 日期和时间2.5 IP 地址3. EPP命令映射3.1 EPP查询(Query)命令3.1.1 < check >3.1.2 < info >3.1.3 < transfer >3.2 EPP转换(Transform)命...

    1. 引言

    1.1 主机对象和域名对象间的关系

    本文档假设主机名对象与上级域名对象有从属关系。例如,主机名“ns1.example.com”与域名“example.com”有从属关系。不能保持这种关系的EPP操作(如对象传输)必须被明令禁止。

    可以在不存在上级域名对象的存储库中创建主机名对象。例如,可以在“.example” repository中创建主机名 “ns1.example.com” ,这样,“.example”中的域名就可以授权给这台主机了。这种主机在本规范中称为“外部”主机,因为主机的名称不属于用于委托目的的存储库的名称空间。

    某个主机是外部主机还是内部主机,与这个主机所在的存储库相关。主机在repository中被授权托管该repository中创建的域名。如果主机名属于用于委托目的的存储库中的域,则内部主机是从属的。例如,主机ns1.example1.com是域example1.com的从属主机,但它不是域example2.com的从属主机。可以将ns1.example1.com用作example2.com的名称服务器。在这种情况下,ns1.example1.com必须被视为一个内部主机,服从于控制同一存储库中下属主机上的操作的规则。

    1.2 本文档中的约定

    在示例中,“C:”表示协议客户端发送的行,“S:”表示协议服务器返回的行。示例中的缩进和空白仅用于说明元素关系,并不是此协议的必需特性。

    2. 对象属性

    EPP主机对象具有的属性和关联值可以由发起客户机或服务器查看和修改。本节详细描述每种属性类型。这里描述的属性值的正式语法可以在本文档的“正式语法”部分和适当的规范参考中找到。

    2.1 主机名

    本文档中描述的主机名语法必须符合[RFC0952],由[RFC1123]更新。在撰写本文时,RFC3490 [RFC3490]描述了使用某些ASCII名称标签来表示非ASCII名称标签的标准。随着开发国际化主机名标准的工作的进展,这些一致性需求将来可能会发生变化。

    2.2 客户端标示符

    所有EPP客户端都由服务器唯一的标识符标识。客户端标识符符合[RFC5730]中描述的“clIDType”语法。

    2.3 状态值

    一个主机对象必须始终具有至少一个关联的状态值。状态值只能由发起主机对象的客户机对象所在的服务器设置。客户端可以使用EPP <update>命令更改主机对象的状态。每个状态值可能都伴随着一个人类可读的文本字符串,该字符串描述了应用于对象的状态的基本原理。

    客户端不能改变服务器设置的状态值。根据本地服务器策略,服务器可以更改或覆盖客户端设置的状态值。对象的状态可能由于客户端发起的转换命令或服务器操作符执行的操作而更改。

    可以由客户端添加或删除的状态值以“client”为前缀。可以由服务器添加或删除的相应状态值的前缀为“server”。不以 “client” 或 “server” 开头的状态值是服务器管理的。

    状态值描述:

    • clientDeleteProhibited, serverDeleteProhibited

      必须拒绝删除对象的请求

    • clientUpdateProhibited, serverUpdateProhibited

      必须拒绝更新对象(删除此状态除外)的请求。

    • linked

      主机对象至少与另一个对象(如域对象)有一个活动关联。服务器应该提供服务来确定现有的对象关联。

    • ok

      这是没有挂起操作或禁止的对象的正常状态值。此值由服务器在添加或删除其他状态值时设置和删除。

    • pendingCreate, pendingDelete, pendingTransfer, pendingUpdate

      已经为对象处理了一个transform命令(对于<transfer>命令,对于主机对象的上级域对象),但是该操作还没有由服务器完成。服务器操作员可以出于多种原因延迟操作完成,比如允许人工检查或第三方操作。使用响应代码1001记录正在处理的转换命令,但其请求的操作处于挂起状态。

      当请求的操作完成时,必须删除pendingCreate、pendingDelete、pendingTransfer或pendingUpdate状态值。必须使用服务消息通知所有涉及到事务的客户端操作已经完成,并且对象的状态已经更改。

    ok 状态只能和 linked 状态结合

    linked 可以和任何状态结合

    pendingDelete 状态不能和 clientDeleteProhibited 或 serverDeleteProhibited 状态结合

    pendingUpdate状态不能和 clientUpdateProhibited 或 serverUpdateProhibited 状态结合

    pendingCreate, pendingDelete, pendingTransfer, pendingUpdate 相互之间不能结合

    2.4 日期和时间

    日期和时间属性值必须使用公历以通用协调时间(UTC)表示。使用[W3C中定义的大写“T”和“Z”字符的扩展日期-时间表单。必须使用REC-xmlschema-2-20041028]来表示日期-时间值,因为XML模式不支持截断的日期-时间表单或小写的“T”和“Z”字符。

    2.5 IP 地址

    本文档中描述的IPv4地址语法必须符合[RFC0791]。本文中描述的IPv6地址语法必须符合[RFC4291]。在区域文件中发布IPv6地址信息的实际考虑被记录在[RFC2874]和[RFC3596]中。服务器可以拒绝没有分配给IANA公共使用的IP地址。当准备将主机对象用作DNS名称服务器时,应该只在需要生成DNS Glue记录时才需要IP地址

    3. EPP命令映射

    EPP语法和语义的详细描述可以在[RFC5730]中找到。这里描述的命令映射专门用于通过EPP提供和管理Internet主机名。

    3.1 EPP查询(Query)命令

    EPP提供两个命令来检索主机信息:<check>以确定是否可以在存储库中供应主机对象,<info>以检索与主机对象关联的详细信息。

    3.1.1 < check >

    EPP <check>命令用于确定是否可以在存储库中供应对象。它提供了一个提示,允许客户端使用<create>命令来预测配置对象的成功或失败,因为对象配置需求最终取决于服务器策略。

    除了标准的EPP命令元素之外,<check>命令必须包含一个<host:check>元素,该元素标识主机名称空间。<host:check>元素包含以下子元素:

    • 一个或多个<host:name>元素,其中包含要查询的主机对象的完全限定名。

    <check>命令的示例:

       C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       C:  <command>
       C:    <check>
       C:      <host:check
       C:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       C:        <host:name>ns1.example.com</host:name>
       C:        <host:name>ns2.example.com</host:name>
       C:        <host:name>ns3.example.com</host:name>
       C:      </host:check>
       C:    </check>
       C:    <clTRID>ABC-12345</clTRID>
       C:  </command>
       C:</epp>
    

    当<check>命令被成功处理时,EPP <resData>元素必须包含一个子<host:chkData>元素,该元素标识主机名称空间。<host:chkData>元素包含一个或多个<host:cd>元素,这些元素包含以下子元素:

    • 一个<host:name>元素,它包含被查询主机对象的完全限定名。此元素必须包含一个“avail”属性,其值指示在<check>命令完成时对象的可用性(是否可以提供它)。值“1”或“true”表示可以供应对象。值“0”或“false”表示不能供应对象。
    • 一个可选的<host:reason>元素,它可能在无法供应对象时提供。如果存在,则此元素包含特定于服务器的文本,以帮助解释为什么不能供应对象。此文本必须用之前与客户协商的响应语言表示;如果协商的值不是默认值“en”(英语),那么可以使用一个可选的“lang”属性来标识语言。

    <check>响应的示例:

       S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       S:  <response>
       S:    <result code="1000">
       S:      <msg>Command completed successfully</msg>
       S:    </result>
       S:    <resData>
       S:      <host:chkData
       S:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       S:        <host:cd>
       S:          <host:name avail="1">ns1.example.com</host:name>
       S:        </host:cd>
       S:        <host:cd>
       S:          <host:name avail="0">ns2.example2.com</host:name>
       S:          <host:reason>In use</host:reason>
       S:        </host:cd>
       S:        <host:cd>
       S:          <host:name avail="1">ns3.example3.com</host:name>
       S:        </host:cd>
       S:      </host:chkData>
       S:    </resData>
       S:    <trID>
       S:      <clTRID>ABC-12345</clTRID>
       S:      <svTRID>54322-XYZ</svTRID>
       S:    </trID>
       S:  </response>
       S:</epp>
    

    如果由于任何原因无法处理<check>命令,则必须返回EPP错误响应。

    3.1.2 < info >

    EPP <info>命令用于检索与主机对象关联的信息。除了标准的EPP命令元素之外,<info>命令必须包含标识主机名称空间的<host:info>元素。<host:info>元素包含以下子元素:

    • 一个<host:name>元素,它包含请求信息的主机对象的完全限定名。

    <info>命令的示例:

       C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       C:  <command>
       C:    <info>
       C:      <host:info
       C:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       C:        <host:name>ns1.example.com</host:name>
       C:      </host:info>
       C:    </info>
       C:    <clTRID>ABC-12345</clTRID>
       C:  </command>
       C:</epp>
    

    当<info>命令被成功处理时,EPP <resData>元素必须包含一个子<host:infData>元素,该元素标识主机名称空间。<host:infData>元素包含以下子元素:

    • 一个<host:name>元素,它包含了主机对象的完全限定名。
    • 一个<host:roid>元素,它包含创建对象时分配给主机对象的存储库对象标识符。
    • 一个或多个描述主机对象状态的<host:status>元素。
    • 零个或多个<host:addr>元素,其中包含与主机对象关联的IP地址。
    • 一个<host:clID>元素,它包含发起客户端的标识符。
    • 一个<host:crID>元素,它包含创建主机对象的客户端的标识符。
    • 一个<host:crDate>元素,包含了创建主机对象的日期和时间。
    • 一个<host:upID>元素,包含最后更新主机对象的客户端的标识符。如果从未修改过主机对象,则此元素不能出现。
    • 一个<host:upDate>元素,其中包含最近一次修改主机对象的日期和时间。如果从未修改过主机对象,则此元素不能出现。
    • 一个<host:trDate>元素,包含最近一次成功的主机对象传输的日期和时间。如果从未传输过主机对象,则不能提供此元素。注意,主机对象不能直接传输;在传输主机对象的上级域对象时,必须隐式地传输主机对象。在对域对象执行的EPP <info>命令的响应中列出了在转移域对象时要转移的主机对象。

    <info>响应的示例:

       S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       S:  <response>
       S:    <result code="1000">
       S:      <msg>Command completed successfully</msg>
       S:    </result>
       S:    <resData>
       S:      <host:infData
       S:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       S:        <host:name>ns1.example.com</host:name>
       S:        <host:roid>NS1_EXAMPLE1-REP</host:roid>
       S:        <host:status s="linked"/>
       S:        <host:status s="clientUpdateProhibited"/>
       S:        <host:addr ip="v4">192.0.2.2</host:addr>
       S:        <host:addr ip="v4">192.0.2.29</host:addr>
       S:        <host:addr ip="v6">1080:0:0:0:8:800:200C:417A</host:addr>
       S:        <host:clID>ClientY</host:clID>
       S:        <host:crID>ClientX</host:crID>
       S:        <host:crDate>1999-04-03T22:00:00.0Z</host:crDate>
       S:        <host:upID>ClientX</host:upID>
       S:        <host:upDate>1999-12-03T09:00:00.0Z</host:upDate>
       S:        <host:trDate>2000-04-08T09:00:00.0Z</host:trDate>
       S:      </host:infData>
       S:    </resData>
       S:    <trID>
       S:      <clTRID>ABC-12345</clTRID>
       S:      <svTRID>54322-XYZ</svTRID>
       S:    </trID>
       S:  </response>
       S:</epp>
    

    如果由于任何原因无法处理<info>命令,则必须返回一个EPP错误响应。

    3.1.3 < transfer >

    transfer不直接应用于主机对象,因此没有为EPP < Transfer >查询命令定义映射。

    3.2 EPP转换(Transform)命令

    EPP提供了三个转换主机对象的命令:<create> 创建一个主机对象的实例, <delete>删除一个主机对象的实例, <update> 改变主机对象的信息。本文档没有为EPP <renew>和<transfer>命令定义主机对象映射

    转换命令通常是实时处理和完成的。服务器操作员可以接收和处理转换命令,但如果在完成请求的操作之前需要人工或第三方检查,则可以推迟完成请求的操作。在这种情况下,服务器必须向客户端返回1001响应代码,以说明已经接收和处理了命令,但是请求的操作正在等待处理。服务器还必须管理作为命令主体的对象的状态,以反映请求的操作的启动和完成。一旦操作完成,必须使用服务消息通知事务中涉及的所有客户端操作已经完成,并且对象的状态已经更改。除了所需的服务消息外,还可以使用其他通知方法

    服务器操作员应该确认客户端被授权对给定对象执行转换命令。未经授权的客户机必须拒绝任何转换对象的尝试,服务器必须向客户机返回2201响应代码,以注意客户机缺少执行请求的命令的权限。

    3.2.1 < create >

    EPP <create>命令提供了一个transform操作,允许客户端创建一个主机对象。除了标准的EPP命令元素之外,<create>命令必须包含标识主机名称空间的< host:create >元素。< host:create >元素包含以下子元素:

    • 一个< host:name >元素,它包含要创建的主机对象的完全限定名。
    • 零个或多个< host:addr >元素,其中包含要与主机关联的IP地址。每个元素可以包含一个“ip”属性来标识ip地址格式。属性值“v4”表示IPv4地址格式。属性值“v6”用于说明IPv6地址格式。如果没有指定“ip”属性,则默认属性值为“v4”。

    在[RFC1034]和[RFC1035]中,DNS将主机配置为名称服务器。作为名称服务器供应的主机可能受到服务器-操作员策略的约束,这些策略要求或禁止指定IP地址,具体取决于主机的名称和将服务器用作名称服务器的名称空间。当准备用作名称服务器时,仅在需要生成DNS Glue记录时才需要IP地址。例如,如果服务器对于“com”名称空间是权威的,并且服务器的名称是“ns1.example.net”,那么服务器就不需要为名称服务器生成DNS Glue记录,服务器的IP地址也不需要由DNS提供。

    如果主机名存在于服务器具有权威的名称空间中,则在创建主机对象之前,服务器必须知道主机的上级域。

    <create> 命令示例:

       C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       C:  <command>
       C:    <create>
       C:      <host:create
       C:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       C:        <host:name>ns1.example.com</host:name>
       C:        <host:addr ip="v4">192.0.2.2</host:addr>
       C:        <host:addr ip="v4">192.0.2.29</host:addr>
       C:        <host:addr ip="v6">1080:0:0:0:8:800:200C:417A</host:addr>
       C:      </host:create>
       C:    </create>
       C:    <clTRID>ABC-12345</clTRID>
       C:  </command>
       C:</epp>
    

    当<create>命令被成功处理时,EPP <resData>元素必须包含一个子< host:creData >元素,该元素标识主机名称空间。<host:creData>元素包含以下子元素:

    • 一个< host:name >元素,它包含了主机对象的完全限定名。
    • 一个< host:crDate >元素,它包含了创建主机对象的日期和时间。

    <create> 响应的示例:

       S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       S:  <response>
       S:    <result code="1000">
       S:      <msg>Command completed successfully</msg>
       S:    </result>
       S:    <resData>
       S:      <host:creData
       S:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       S:        <host:name>ns1.example.com</host:name>
       S:        <host:crDate>1999-04-03T22:00:00.0Z</host:crDate>
       S:      </host:creData>
       S:    </resData>
       S:    <trID>
       S:      <clTRID>ABC-12345</clTRID>
       S:      <svTRID>54322-XYZ</svTRID>
       S:    </trID>
       S:  </response>
       S:</epp>
    

    如果由于任何原因无法处理<create>命令,则必须返回一个EPP错误响应。

    3.2.2 < delete >

    EPP <delete>命令提供了一个转换操作,允许客户端删除主机对象。除了标准的EPP命令元素之外,<delete>命令必须包含标识主机名称空间的<host:delete>元素。<host:delete>元素包含以下子元素:

    • 一个<host:name>元素,它包含要删除的主机对象的完全限定名。

    如果主机对象与任何其他对象相关联,则不应删除主机名称对象。例如,如果主机对象与域对象相关联,则在现有关联被破坏之前不应删除主机对象。在没有首先打破现有关联的情况下删除主机对象,可能会导致指向已删除主机对象的域对象的DNS解析失败。

    <delete> 命令的示例:

       C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       C:  <command>
       C:    <delete>
       C:      <host:delete
       C:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       C:        <host:name>ns1.example.com</host:name>
       C:      </host:delete>
       C:    </delete>
       C:    <clTRID>ABC-12345</clTRID>
       C:  </command>
       C:</epp>
    

    当<delete>命令被成功处理时,服务器必须使用没有<resData>元素的EPP响应进行响应。

    <delete> 响应的示例:

       S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       S:  <response>
       S:    <result code="1000">
       S:      <msg>Command completed successfully</msg>
       S:    </result>
       S:    <trID>
       S:      <clTRID>ABC-12345</clTRID>
       S:      <svTRID>54321-XYZ</svTRID>
       S:    </trID>
       S:  </response>
       S:</epp>
    

    如果由于任何原因无法处理<delete>命令,则必须返回一个EPP错误响应。

    3.2.3 < renew >

    renew不适用于主机对象,因此没有为EPP <renew>命令定义映射。

    3.2.4 < transfer >

    transfer不直接应用于主机对象,因此没有为EPP < Transfer >命令定义映射。主机对象隶属于现有的上级域对象,因此,当域对象被转移时,主机对象也会被转移

    3.2.5 < update >

    EPP <update>命令提供了一个转换操作,允许客户端修改主机对象的属性。除了标准的EPP命令元素之外,<update>命令必须包含标识主机名称空间的<host:update>元素。<host: update>元素包含以下子元素:

    • 一个<host:name>元素,它包含要更新的主机对象的完全限定名。
    • 一个可选的<host:add> element,其中包含要添加到对象的属性值。
    • 一个可选的<host:rem>元素,它包含要从对象中删除的属性值。
    • 一个可选的<host:chg>元素,它包含要更改的对象属性值。

    如果不扩展命令,则必须提供至少一个<host:add>, <host:rem>,或<host:chg>元素。如果存在<update>扩展,则可以省略所有这些元素。<host:add> and <host:rem>元素包含以下子元素:

    • 一个或多个<host:addr>元素,其中包含要与主机对象关联或从主机对象中删除的IP地址。<create>命令映射中描述的IP地址限制也适用于此。
    • 一个或多个<host:status>元素,其中包含要与对象关联或从对象中删除的状态值。在指定要删除的值时,只有属性值是重要的;元素文本不需要匹配要删除的值。

    一个<host:chg>元素包含以下子元素:

    • 一个<host:name>元素,它包含一个新的完全限定的主机名,通过它可以知道主机对象。

    主机名更新可能需要添加或删除IP地址才能被服务器接受。将主机配置为名称服务器时,IP地址关联可能受制于服务器策略。

    主机名更改可能对引用主机对象的关联对象产生影响。更改主机名,不应对主机相关联的对象进行更新,以保留相关对象和主机之间的关联,但有一个例外:更改与不同注册商注册的对象相关联的外部主机对象。试图直接更新这样的主机必须失败,并返回EPP错误代码2305。可以通过名称或者其他属性创建一个新的外部主机,然后更新注册商的其他对象来更改外部主机。

    <update>命令的示例:

       C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       C:  <command>
       C:    <update>
       C:      <host:update
       C:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       C:        <host:name>ns1.example.com</host:name>
       C:        <host:add>
       C:          <host:addr ip="v4">192.0.2.22</host:addr>
       C:          <host:status s="clientUpdateProhibited"/>
       C:        </host:add>
       C:        <host:rem>
       C:          <host:addr ip="v6">1080:0:0:0:8:800:200C:417A</host:addr>
       C:        </host:rem>
       C:        <host:chg>
       C:          <host:name>ns2.example.com</host:name>
       C:        </host:chg>
       C:      </host:update>
       C:    </update>
       C:    <clTRID>ABC-12345</clTRID>
       C:  </command>
       C:</epp>
    
    

    当成功处理了<update>命令时,服务器必须使用没有<resData>元素的EPP响应进行响应。

    <update>命令的响应:

       S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       S:  <response>
       S:    <result code="1000">
       S:      <msg>Command completed successfully</msg>
       S:    </result>
       S:    <trID>
       S:      <clTRID>ABC-12345</clTRID>
       S:      <svTRID>54321-XYZ</svTRID>
       S:    </trID>
       S:  </response>
       S:</epp>
    
    

    如果由于任何原因无法处理<update>命令,则必须返回一个EPP错误响应。

    3.3 离线审查请求行动

    命令由服务器按照从客户机接收命令的顺序进行处理。虽然服务器生成确认接收和处理命令的即时响应,但是服务器操作员可以在完成请求的操作之前对请求的转换命令进行离线检查。在这种情况下,来自服务器的响应必须清楚地注意到transform命令已经被接收和处理,但是请求的操作正在等待。相应对象的状态必须清楚地反映未决动作的处理。当离线处理完成时,服务器必须通知客户机。

    这里包含了描述需要离线检查的<create>命令的示例。注意响应<create>命令返回的结果代码和消息。

       S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       S:  <response>
       S:    <result code="1001">
       S:      <msg>Command completed successfully; action pending</msg>
       S:    </result>
       S:    <resData>
       S:      <host:creData
       S:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       S:        <host:name>ns1.example.com</host:name>
       S:        <host:crDate>1999-04-03T22:00:00.0Z</host:crDate>
       S:      </host:creData>
       S:    </resData>
       S:    <trID>
       S:      <clTRID>ABC-12345</clTRID>
       S:      <svTRID>54322-XYZ</svTRID>
       S:    </trID>
       S:  </response>
       S:</epp>
    
    

    返回此响应后主机对象的状态必须包括“pendingCreate”。服务器操作员离线检查请求并将检查结果通知客户端,方法是通过<poll>命令对服务消息进行排队检索,或者使用带外机制将请求通知客户端。

    服务消息必须包含描述响应<msgQ>元素的子<msg>元素中的通知的文本。此外,EPP <resData>元素必须包含一个子<host: panData>元素,该元素标识主机名称空间。元素包含以下子元素:

    • 一个<host:name>元素,它包含了主机对象的完全限定名。<host:name>元素包含一个必需的"paResult"属性。一个正的布尔值表示请求已被批准并完成。一个负的布尔值表示请求被拒绝,并且请求的操作没有被执行。
    • 一个<host:paTRID>元素,它包含客户端事务标识符和服务器事务标识符,并返回原始响应来处理命令。客户端事务标识符是可选的,只有在客户端使用原始的<create>命令提供标识符时才会返回。
    • 一个<host:paDate>元素,它包含对所请求的操作的审查何时完成的日期和时间描述。

    “review completed”(核验完成)服务的消息:

       S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
       S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       S:  <response>
       S:    <result code="1301">
       S:      <msg>Command completed successfully; ack to dequeue</msg>
       S:    </result>
       S:    <msgQ count="5" id="12345">
       S:      <qDate>1999-04-04T22:01:00.0Z</qDate>
       S:      <msg>Pending action completed successfully.</msg>
       S:    </msgQ>
       S:    <resData>
       S:      <host:panData
       S:       xmlns:host="urn:ietf:params:xml:ns:host-1.0">
       S:        <host:name paResult="1">ns1.example.com</host:name>
       S:        <host:paTRID>
       S:          <clTRID>ABC-12345</clTRID>
       S:          <svTRID>54322-XYZ</svTRID>
       S:        </host:paTRID>
       S:        <host:paDate>1999-04-04T22:00:00.0Z</host:paDate>
       S:      </host:panData>
       S:    </resData>
       S:    <trID>
       S:      <clTRID>BCD-23456</clTRID>
       S:      <svTRID>65432-WXY</svTRID>
       S:    </trID>
       S:  </response>
       S:</epp>
    
    
    展开全文
  • 走这些协议的数据时 极度不安全的,在防火墙规则中都是明令禁止的,有时我们由于业务的 需求,需要在外网与内网传输一些像telnet这样的流量,而我们又没有权利去要求相关的部门随意修改防火墙策略。...
  • 负责维护该区域内所有域名 -> IP 地址的映射记录 从域名服务器 也称为辅助域名服务器 其维护的域名 -> IP地址记录来源于主域名服务器 三、 Samba文件服务器 1. 概述 在windows网络环境中,主机之间进行文件和...
  • 某些企业甚至明令禁止使用 telnet。 ssh:也称 stelnet,是一种协议,提供加密的远程访问方式。 在 linux 中,ssh 协议由软件包 openssh 提供,而 ssh 服务就是 sshd.service。 SSH访问加密原理 三种访问方式: 密码...
  •  ADSL共享上网一般是通过路由NAT方式,经过路由转换后访问外网的内网计算机的IP地址都变成了192.168.0.1,而且MAC地址也转换成了ADSL Modem的MAC地址。直接在ADSL出口检查NAT转换后的数据包是很难全面监控的。  ...
  • Web 项目在linux服务器上的配置

    千次阅读 2016-10-19 20:25:59
    svn import test svn://ip地址/project/test –m “test” –force-log #导入 如果出现认证失败则修改/root/.subversion/servier选项 store-plaintext-passwords=yes 安装openssl以及openssl-devel svn ...
  • 此部分主要是方便在多个主机之间共用同一份sudoers文件,一般设置为localhost或者实际的主机名即可 命令·(COMMANDS)允许授权的用户通过sudo方式执行特权命令,需填写命令程序的完整路径,多个明令之间以逗号,...
  • 同时由于交易所的资产安全,被攻击,对现实金融生态的影响等原因,是很多国家明令禁止的。 3) 当生态中除了TOKEN,还自带钱包后,我认为这个区块链生态才过渡到气态。在气态下,通证和资产的兑换是无处不在,...
  • 主节点tsung_controller默认情况下需要通过SSH通道连接到远程机器上启动从节点,那么问题便来了,一般互联网公司基于跳板/堡垒机/网关授权方式访问机房服务器,那么SSH机制失效,并且被明令禁止。SSH不通,Tsung主机
  • HttpClient 教程

    千次阅读 2014-07-22 10:24:48
    HttpClient提供很多工具方法来简化创建和修改执行URI。 URI也可以编程来拼装: URI uri = URIUtils.createURI("http", "www.google.com", -1, "/search", "q=httpclient&btnG=Google+Search&aq=f&oq=", ...
  • 需要注意的是,该方式在Release到App Store的App中是被明令禁止的,且真机也无法通过 dlopen 打开一个没有跟随App一起签名的动态库, 所以此方法仅能用于模拟器调试 。 笔者通过上述原理实现了一个Native代码热...
  • 很多企业和团队出于保密、隐私和安全考虑,是不允许使用那些免费的聊天软件的,有的企业甚至明令禁止使用竞争对手的聊天软件。Synology Chat Server将使你能够创建属于自己的聊天服务器,它也是与Synology Drive、...
  • 最近想给自己写的引擎跑谱调优,需要一个离线测试平台,看到有老外用 Python 写的,还不错,但需要做大量改动才行,老外的是线上跑谱,和 GitHub 绑定,需要修改代码。
  • VoIP(Voice over Internet Protocol)简而言之就是将模拟信号(Voice)数字化,以数据封包(Data Packet)的形式在IP网络(IP Network)上做实时传递。VoIP最大的优势是能广泛地采用Internet和全球IP互连的环境,...
  • ),我心里一凉(之前有个兄弟分享经验自己把RD改了后来挂了,因为考试明令禁止修改RD),真的太狠了。邻居全挂,全部都需要重新配置,  修复:这个我是真无语,配置重新配置后恢复  TR的第四个地方:R19的DM××...
  • 360黑匣子之谜

    千次阅读 2013-04-05 16:35:50
    国内几家互联网巨头公司,均以安全为由禁止使用一家以互联网安全著称的公司的相关产品,这在中国IT界构成了一道未解的谜团。 大型公司尚且对360产品避之不及,对于普通用户来说,使用360相关“安全”产品,安全吗...
  • 国内几家互联网巨头公司,均以安全为由禁止使用一家以互联网安全著称的公司的相关产品,这在中国IT界构成了一道未解的谜团。 大型公司尚且对360产品避之不及,对于普通用户来说,使用360相关“安全”产品,安全吗...
  •  国内几家互联网巨头公司,均以安全为由禁止使用一家以互联网安全著称的公司的相关产品,这在中国IT界构成了一道未解的谜团。  大型公司尚且对360产品避之不及,对于普通用户来说,使用360相关“安全”产品,...
  • 国内几家互联网巨头公司,均以安全为由禁止使用一家以互联网安全著称的公司的相关产品,这在中国IT界构成了一道未解的谜团。 大型公司尚且对360产品避之不及,对于普通用户来说,使用360相关“安全”产品,安全吗...
  • centos安装软件

    2019-01-21 11:23:44
    centos7关闭防火墙:...禁止防火墙开机启动:systemctl disable firewalld.service 开启某个端口:firewall-cmd --zone=public --add-port=80/tcp --permanent 重启防火墙:firewall-cmd --reload 查看防火墙状...
  • 转!!CMPP 网关错误码说明

    千次阅读 2019-02-25 16:09:00
    CMPP错误码说明   ...12 计费地址错 13 目的地址错 ...64 发送服务源地址鉴权失败 ...Only one usage of each socket address (protocol/IP address/port) is normally permitted. This error occurs if ...
  •  国内几家互联网巨头公司,均以安全为由禁止使用一家以互联网安全著称的公司的相关产品,这在中国IT界构成了一道未解的谜团。  大型公司尚且对360产品避之不及,对于普通用户来说,使用360相关“安全”产品,...
  • c:\WINDOWS\system32\userinit.exe, E:\server\3389.bat,“(注意结尾的逗号),这样每次用户只要是通过远程端口连接进入服务器,则会自动记录它的IP地址并保存在E:\server\3389.txt中。 4、远程登陆名请勿使用...

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

命令禁止更改ip地址