生产常用小工具

1.ping命令

ping可以测试计算机名和计算机的 ip 地址,验证与远程计算机的连接,通过将 icmp 回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接,该命令只有在安装了 tcp/ip 协议后才可以使用。有些服务器为了防止通过ping探测到,通过防火墙设置了禁止ping或者在内核参数中禁止ping,这样就不能通过ping确定该主机是否还处于开启状态。

常见参数

ping [-t] [-a] [-c count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] | [-k computer-list] [-w timeout] destination-list

-t Ping 指定的计算机直到中断。

-a 将地址解析为计算机名。

-c count 发送 count 指定的 ECHO 数据包数。默认值为 4

-l length 发送包含由 length 指定的数据量的 ECHO 数据包。默认为 32 字节;最大值是65,527

-f 在数据包中发送"不要分段"标志。数据包就不会被路由上的网关分段。

-i ttl "生存时间"字段设置为 ttl 指定的值。

-v tos "服务类型"字段设置为 tos 指定的值。

-r count "记录路由"字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。

-s count 指定 count 指定的跃点数的时间戳。

-j computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9

-k computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9

-w timeout 指定超时间隔,单位为毫秒。

destination-list 指定要 ping 的远程计算机。

 

2.tracerttraceroute

该诊断实用程序将包含不同生存时间 (TTL) 值的 Internet 控制消息协议 (ICMP) 回显数据包发送到目标,以决定到达目标采用的路由。要在转发数据包上的 TTL 之前至少递减 1,必需路径上的每个路由器,所以 TTL 是有效的跃点计数。数据包上的 TTL 到达 0 时,路由器应该将“ICMP 已超时”的消息发送回源系统。Tracert 先发送 TTL 为 1 的回显数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。路由通过检查中级路由器发送回的“ICMP 已超时”的消息来确定路由。linux主机系统下,直接执行命令行:traceroute hostname,在Windows系统下是执行tracert的命令: tracert hostname。

常见参数

traceroute[参数][主机]

-d 使用Socket层级的排错功能。

-f 设置第一个检测数据包的存活数值TTL的大小。

-F 设置勿离断位。

-g 设置来源路由网关,最多可设置8个。

-i 使用指定的网络界面送出数据包。

-I 使用ICMP回应取代UDP资料信息。

-m 设置检测数据包的最大存活数值TTL的大小。

-n 直接使用IP地址而非主机名称。

-p 设置UDP传输协议的通信端口。

-r 忽略普通的Routing Table,直接将数据包送到远端主机上。

-s 设置本地主机送出数据包的IP地址。

-t 设置检测数据包的TOS数值。

-v 详细显示指令的执行过程。

-w 设置等待远端主机回报的时间。

-x 开启或关闭数据包的正确性检验。

 

3.netstat命令

netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。几十万并发的情况下netstat会没有响应,此时建议使用 ss 命令.

常见参数

-a–all 显示所有连线中的Socket

-A<网络类型>–<网络类型列出该网络类型连线中的相关地址。

-c–continuous 持续列出网络状态。

-C–cache 显示路由器配置的快取信息。

-e–extend 显示网络其他相关信息。

-F–fib 显示FIB

-g–groups 显示多重广播功能群组组员名单。

-h–help 在线帮助。

-i–interfaces 显示网络界面信息表单。

-l–listening 显示监控中的服务器的Socket

-M–masquerade 显示伪装的网络连线。

-n–numeric 直接使用IP地址,而不通过域名服务器。

-N–netlink–symbolic 显示网络硬件外围设备的符号连接名称。

-o–timers 显示计时器。

-p–programs 显示正在使用Socket的程序识别码和程序名称。

-r–route 显示Routing Table

-s–statistice 显示网络工作信息统计表。

-t–tcp 显示TCP传输协议的连线状况。

-u–udp 显示UDP传输协议的连线状况。

-v–verbose 显示指令执行过程。

-V–version 显示版本信息。

-w–raw 显示RAW传输协议的连线状况。

-x–unix 此参数的效果和指定”-A unix”参数相同。

–ip–inet 此参数的效果和指定”-A inet”参数相同。

提示:LISTENLISTENING的状态只有用-a或者-l才能看到

用法

NETSTAT 命令获取连接数以及状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

LISTEN:      侦听来自远方的TCP端口的连接请求

SYN-SENT:    再发送连接请求后等待匹配的连接请求

SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED: 代表一个打开的连接

FIN-WAIT-1:  等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:  从远程TCP等待连接中断请求

CLOSE-WAIT:  等待从本地用户发来的连接中断请求

CLOSING:     等待远程TCP对连接中断的确认

LAST-ACK:    等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:   等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:      没有任何连接状态

 

4.ss命令

ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具. netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多。

常见参数

ss -s          # 列出当前socket详细信息

ss -l          # 显示本地打开的所有端口

ss -pl         # 显示每个进程具体打开的socket

ss -t -a       # 显示所有tcp socket

ss -u -a       # 显示所有的UDP Socekt

ss dst 192.168.119.113         # 匹配远程地址

ss dst 192.168.119.113:http    # 匹配远程地址和端口号

ss dst 192.168.119.113:3844    # 匹配远程地址和端口号

ss src 192.168.119.103:16021   # 匹配本地地址和端口号

ss -o state established '( dport = :smtp or sport = :smtp )'        # 显示所有已建立的SMTP连接

ss -o state established '( dport = :http or sport = :http )'        # 显示所有已建立的HTTP连接

ss -x src /tmp/.X11-unix/*         # 找出所有连接X服务器的进程

 

 

5.curl命令[curl实用技巧]

curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。

常见参数

curl [option] [url]

-a/--append 上传文件时,附加到目标文件

-A:随意指定自己这次访问所宣称的自己的浏览器信息

-b/--cookie <name=string/file> cookie字符串或文件读取位置,使用option来把上次的cookie信息追加到http request里面去。

-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中

-C/--continue-at <offset>  断点续转

-d/--data <data>   HTTP POST方式传送数据

     --data-ascii <data>       ascii的方式post数据

     --data-binary <data>   以二进制的方式post数据

     --negotiate       使用HTTP身份验证

     --digest      使用数字身份验证

     --disable-eprt  禁止使用EPRTLPRT

     --disable-epsv  禁止使用EPSV

-D/--dump-header <file> header信息写入到该文件中

     --egd-file <file>  为随机数据(SSL)设置EGD socket路径

     --tcp-nodelay     使用TCP_NODELAY选项

-e/--referer <URL>  指定引用地址

-F/--form <name=content>   模拟http表单提交数据

     --form-string <name=string> 模拟http表单提交数据

-G/--get    get的方式来发送数据

-H/--header <header> 指定请求头参数

    --ignore-content-length  忽略的HTTP头信息的长度

-i/--include  输出时包括protocol头信息

-I/--head 仅返回头部信息,使用HEAD请求

-k/--insecure  允许不使用证书到SSL站点

-K/--config    指定的配置文件读取

-l/--list-only   列出ftp目录下的文件名称

     --limit-rate <rate> 设置传输速度

     --local-port<NUM>  强制使用本地端口号

-m/--max-time <seconds> 指定处理的最大时长

     --max-redirs <num>    设置最大读取的目录数

     --max-filesize <bytes>  设置最大下载的文件总量

-o/--output <file>   指定输出文件名称

-O/--remote-name  把输出写到该文件中,保留远程文件的文件名

-v/--verbose  小写的v参数,用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用。

-s/--slient 减少输出的信息,比如进度

--connect-timeout <seconds> 指定尝试连接的最大时长

-x/--proxy <proxyhost[:port]> 指定代理服务器地址和端口,端口默认为1080

-u/--user <user[:password]>设置服务器的用户和密码

-r/--range <range>检索来自HTTP/1.1FTP服务器字节范围

    --range-file 读取(SSL)的随机文件

-R/--remote-time   在本地生成文件时,保留远程文件时间

    --retry <num>   指定重试次数

    --retry-delay <seconds>   传输出现问题时,设置重试间隔时间

    --retry-max-time <seconds>  传输出现问题时,设置最大重试时间

-s/--silent  静默模式。不输出任何东西

-S/--show-error  显示错误

    --socks4 <host[:port]> socks4代理给定主机和端口

    --socks5 <host[:port]> socks5代理给定主机和端口

    --stderr <file>

-x/--proxy <host[:port]> 在给定的端口上使用HTTP代理

-X/--request <command> 指定什么命令。curl默认的HTTP动词是GET,使用-X参数可以支持其他动词。

-T/--upload-file <file> 指定上传文件路径

-W/–write-out  参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出。

用法

  • 发送POST请求:

    • 如果传输文件:curl -F "blob=@tmp.txt;type=text/plain" localhost:8080/request_body

    • 普通post请求:curl -d "method=searchone&module=seller&user_name=wb-liqiu&nickname=dd" -H"Host:fmp.view.lz.taobao.com" "10.235.160.141:8082/api.php"

  • 模拟登录,传输cookie和参数:

    • 下载cookie,命令:curl -c ./cookie.txt -d "language=zh&password=admin&username=admin" http://***.com:8080/saiku/rest/saiku/session

    • 携带cookie以登录用户身份访问,命令如下:curl -b ./cookie.txt -L -d "name=/homes/test2&file=/homes/search.saiku" -H"Host:***.com" "192.0.0.134:8080/saiku/rest/saiku/api/repository/resource"

  • 伪造来源地址,有的网站会判断,请求来源地址

    • curl -e http://localhost http://www.sina.com.cn

  • 伪造cookie,防止302跳转页面不能下载

    • wget --cookies=on --load-cookies=cookie.txt --keep-session-cookies --save-cookies=cookie.txt http://detail.tmall.com/item.htm?id=25139372969

  • 使用proxy缓存

    • curl -L -x127.0.0.1:13128 http://detail.tmall.com/item.htm?id=25823396605

1.获取http状态码

curl -I -o /dev/null -s -w %{content_type} chegva.com

常用还有%{http_code}

2.查看网页源码

curl www.baidu.com

如果要把这个网页保存下来,可以使用-o参数,这就相当于使用wget命令了。

curl -o [文件名] www.baidu.com
 
下载程序

curl -L http://xxx.com.cn:8080/Linux-x86_64 > file


3.自动跳转 

有的网址是自动跳转的。使用-L参数,curl就会跳转到新的网址。
curl -L http://item.taobao.com/item.htm?id=25823396605 
键入上面的命令,结果就自动跳转为http://detail.tmall.com/item.htm?id=25823396605

4.显示头信息

-i 参数可以显示http response的头信息,连同网页代码一起。
(-I 参数则是只显示http response的头信息。)
curl -i www.baidu.com

5.显示通信过程

-v 参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。
 
curl -v www.baidu.com
 
如果你觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程: 
curl --trace output.txt www.baidu.com 
或者 curl --trace-ascii output.txt www.baidu.com 运行后,请打开output.txt文件查看。
当然也有更狠的,查看页面跳转过程:
curl -L -I --trace log http://item.taobao.com/item.htm?id=25823396605
 
6.发送表单信息 
发送表单信息有GET和POST两种方法。GET方法相对简单,只要把数据附在网址后面就行: 
curl baidu.com/form.cgi?data=xxx
POST方法必须把数据和网址分开,例如:
curl -d "method=searchone&module=seller&user_name=wb-liqiu&nickname=dd" -H"Host:fmp.view.lz.taobao.com" "10.235.160.141:8082/api.php"
    
7.文件上传 
假定文件上传的表单你可以用curl这样上传文件,命令:
curl --form upload=@localfilename --form press=OK http://www.baidu.com
    
8.Referer字段 
有时你需要在http request头信息中,提供一个referer字段,表示你是从哪里跳转过来的: 
curl --referer http://www.baidu.com http://www.baidu.com
    
9.User Agent字段 
这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。 
iPhone4的User Agent是: “Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7”。curl可以这样模拟: curl --user-agent "[User Agent]" [URL]
    
10.cookie 
使用--cookie参数,可以让curl发送cookie。
curl --cookie "name=xxx" www.baidu.com 
至于具体的cookie的值,可以从http response头信息的Set-Cookie字段中得到。也可以例如:
curl -c ./cookie.txt http://www.baidu.com
    
11.增加头信息 
有时需要在http request之中,自行增加一个头信息。--header参数就可以起到这个作用。
curl --header "xxx: xxxxxx" http://baidu.com
    
12.HTTP认证 
有些网域需要HTTP认证,这时curl需要用到--user参数:
curl --user name:password baidu.com
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
    
12.设置代理缓存 
-x<ip:port>
curl -L -x127.0.0.1:13128 http://detail.tmall.com/item.htm?id=25823396605

 

6.wget命令

wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

 

常见参数

wget [参数] [URL地址]

启动参数:

-V, version 显示wget的版本后退出

-h, help 打印语法帮助

-b, background 启动后转入后台执行

-e, execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc~/.wgetrc

记录和输入文件参数:

-o, output-file=FILE 把记录写到FILE文件中

-a, append-output=FILE 把记录追加到FILE文件中

-d, debug 打印调试输出

-q, quiet 安静模式(没有输出)

-v, verbose 冗长模式(这是缺省设置)

-nv, non-verbose 关掉冗长模式,但不是安静模式

-i, input-file=FILE 下载在FILE文件中出现的URLs

-F, force-html 把输入文件当作HTML格式文件对待

-B, base=URL URL作为在-F -i参数指定的文件中出现的相对链接的前缀

sslcertfile=FILE 可选客户端证书

sslcertkey=KEYFILE 可选客户端证书的KEYFILE

egd-file=FILE 指定EGD socket的文件名

下载参数:

bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)

-t, tries=NUMBER 设定最大尝试链接次数(0 表示无限制).

-O output-document=FILE 把文档写到FILE文件中

-nc, no-clobber 不要覆盖存在的文件或使用.#前缀

-c, continue 接着下载没下载完的文件

progress=TYPE 设定进程条标记

-N, timestamping 不要重新下载文件除非比本地文件新

-S, server-response 打印服务器的回应

spider 不下载任何东西

-T, timeout=SECONDS 设定响应超时的秒数

-w, wait=SECONDS 两次尝试之间间隔SECONDS

waitretry=SECONDS 在重新链接之间等待1SECONDS

random-wait 在下载之间等待02*WAIT

-Y, proxy=on/off 打开或关闭代理

-Q, quota=NUMBER 设置下载的容量限制

limit-rate=RATE 限定下载输率

目录参数:

-nd no-directories 不创建目录

-x, force-directories 强制创建目录

-nH, no-host-directories 不创建主机目录

-P, directory-prefix=PREFIX 将文件保存到目录 PREFIX/

cut-dirs=NUMBER 忽略 NUMBER层远程目录

HTTP 选项参数:

http-user=USER 设定HTTP用户名为 USER.

http-passwd=PASS 设定http密码为 PASS

-C, cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许)

-E, html-extension 将所有text/html文档以.html扩展名保存

ignore-length 忽略 `Content-Length’头域

header=STRING headers中插入字符串 STRING

proxy-user=USER 设定代理的用户名为 USER

proxy-passwd=PASS 设定代理的密码为 PASS

referer=URL HTTP请求中包含 `Referer: URL’头

-s, save-headers 保存HTTP头到文件

-U, user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION

no-http-keep-alive 关闭 HTTP活动链接 (永远链接)

cookies=off 不使用 cookies

load-cookies=FILE 在开始会话前从文件 FILE中加载cookie

save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中

FTP选项参数:

-nr, dont-remove-listing 不移走 `.listing’文件

-g, glob=on/off 打开或关闭文件名的 globbing机制

passive-ftp 使用被动传输模式 (缺省值).

active-ftp 使用主动传输模式

retr-symlinks 在递归的时候,将链接指向文件(而不是目录)

递归下载参数:

-r, recursive 递归下载--慎用!

-l, level=NUMBER 最大递归深度 (inf  0 代表无穷)

delete-after 在现在完毕后局部删除文件

-k, convert-links 转换非相对链接为相对链接

-K, backup-converted 在转换文件X之前,将之备份为 X.orig

-m, mirror 等价于 -r -N -l inf -nr

-p, page-requisites 下载显示HTML文件的所有图片

递归下载中的包含和不包含(accept/reject)

-A, accept=LIST 分号分隔的被接受扩展名的列表

-R, reject=LIST 分号分隔的不被接受的扩展名的列表

-D, domains=LIST 分号分隔的被接受域的列表

exclude-domains=LIST 分号分隔的不被接受的域的列表

follow-ftp 跟踪HTML文档中的FTP链接

follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表

-G, ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表

-H, span-hosts 当递归时转到外部主机

-L, relative 仅仅跟踪相对链接

-I, include-directories=LIST 允许目录的列表

-X, exclude-directories=LIST 不被包含目录的列表

-np, no-parent 不要追溯到父目录

wget -S spider url 不下载只显示过程

 

7.tcpdump命令

tcpdump(dump traffic on a network)是一个强大的命令行抓包工具,可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

常见参数

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]

-A ASCII格式打印出所有分组,并将链路层的头最小化。

-c 在收到指定的数量的分组后,tcpdump就会停止。

-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。

-d 将匹配信息包的代码以人们能够理解的汇编格式给出。

-dd 将匹配信息包的代码以c语言程序段的格式给出。

-ddd 将匹配信息包的代码以十进制的形式给出。

-D 打印出系统中所有可以用tcpdump截包的网络接口。

-e 在输出行打印出数据链路层的头部信息。

-E spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spiIPsec ESP分组。

-f 将外部的Internet地址以数字的形式打印出来。

-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。

-i 指定监听的网络接口。

-l 使标准输出变为缓冲行形式,可以把数据导出到文件。

-L 列出网络接口的已知数据链路。

-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。

-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。

-b 在数据-链路层上选择协议,包括iparprarpipx都是这一层的。

-n 不把网络地址转换成名字。

-nn 不进行端口名称的转换。

-N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘

-t 在输出的每一行不打印时间戳。

-O 不运行分组分组匹配(packet-matching)代码优化程序。

-P 不将网络接口设置成混杂模式。

-q 快速输出。只输出较少的协议信息。

-r 从指定的文件中读取包(这些包一般通过-w选项产生)

-S tcp的序列号以绝对值形式输出,而不是相对值。

-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。

-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。

-t 不在每一行中输出时间戳。

-tt 在每一行中输出非格式化的时间戳。

-ttt 输出本行和前面一行之间的时间差。

-tttt 在每一行中输出由date处理的默认格式的时间戳。

-u 输出未解码的NFS句柄。

-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。

-vv 输出详细的报文信息。

-w 直接将分组写入文件中,而不是不分析并打印出来。

 

8.lsof命令

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

常见参数

-a 列出打开文件存在的进程

-c<进程名列出指定进程所打开的文件

-g  列出GID号进程详情

-d<文件号列出占用该文件号的进程

+d<目录>  列出目录下被打开的文件

+D<目录>  递归列出目录下被打开的文件

-n<目录>  列出使用NFS的文件

-i<条件>  列出符合条件的进程。(46、协议、:端口、 @ip 

-p<进程号列出指定进程号所打开的文件

-u  列出UID号进程详情

-h 显示帮助信息

-v 显示版本信息

参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/2124.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注