Troubleshooting(三):网络

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

前言

    在 Troubleshooting 过程中,检查完进程信息后,接下来就是排查网络情况的时候了,初略翻过《TCP/IP 详解卷一:协议》这本书,简直跟看《深入理解 Linux 内核》一毛一样,各种协议各种底层结构体,每个域代表不同的意思,许许多多的域组合在一起共同控制着网络和内核。

    Troubleshooting 系列仅仅整理工具和排查问题可能用到的命令,尽量不细述底层概念(功力有限我也写不出来)。

    curl netstat iptables network ifconfig ip地址配置 traceroute telnet ping lsof iftop(top系列)vpn tcpdump 等抓包,和各种网络攻击(后续单独整理)

 

网络状态

 

  • netstat

    显示网络相关信息(网络连接、路由表、接口状态等)

    常见的参数:

    -a    显示所有连接中的 socket

    -c    持续列出网络状态

    -n    尽量把别名转换成数字显示

    -o    显示计时器

    -p    显示正在使用 socket 的程序识别码和程序名称

    -i    显示网卡列表

    -s    显示网络统计信息

    -v    显示指令执行过程,与 -p 不可同用

    -t/u    tcp/udp 连接状况

 

    netstat 的输出结果可分为两个部分:

    1、Active Internet connections:有源 TCP 连接,列中 Recv-Q 和 Send-Q 为接受队列和发送队列,如果没有堆积一般都为 0。

    2、Active UNIX domain sockets:有源 Unix 域套接口(只能用于本机通信,性能较高),RefCnt 表示连接到套接口的进程号。

    套接口的类型:TCP、UDP、RAW、UNIX 域 等

    状态:

    LISTEN:处于监听状态ESTABLISHED:表示打开的一个连接SYN-SENT:发送连接请求后等待匹配的状态SYN-RECEIVED:收到和发送一个连接请求后等待对方确认连接请求FIN-WAIT-1:等待远程 TCP 连接中断请求,或之前的连接中断请求确认FIN-WAIT-2:从远程 TCP 等待连接中断请求CLOSE-WAIT:等待从本地用户发来的连接中断请求CLOSING:等待远程 TCP 对连接中断的确认LAST-ACK:等待原来的发向远程 TCP 的连接中断请求的确认TIME-WAIT:等待足够的时间以确保远程 TCP 接收到连接中断请求的确认CLOSED:没有任何连接状态

 

    通过 netstat 可以查看连接本机的ip,通过 uniq 可以统计出连接 ip 的数量。

        

  • curl

    curl 是一款用于上传下载的传输工具,支持 http/https/ftp/imap/pop3 等协议,同时也支持断点续传,功能十分强大。

    PS:本人用的最多的是在无图形界面的 linux 上测试网页状态,将网页输出到界面上:

    curl http://www.baidu.com

    -o:保存网页至指定文件-O:保存服务器上指定文件,url 需要明确指定文件名-C/--continue-at:断点续传,可指定位置获取数据,假设文件大小为1000字节,-C 100 代表获取 100-999 的数据-r:分块下载,类似于 -C,可以使用区间,-r 0-1024 代表获取 0-1024 的数据,cat part* > all 即可以合并-T/--upload-file:上传,-T "file[1-100].txt" ftp://myserver.com/upload/、-T "{file1.txt, file2.txt}" http://myserver.com-d/--data:post 请求,-d "id=1&name=test" http://myserver.com/example.php-F/--form:上传,-F "password=@/etc/passwd" www.mypasswords.com-e/--referer:伪造 referer(盗链),服务器一般会检查 http 请求的 referer,用于控制访问,也就是告诉服务器你是从哪个页面跳转过来的,-e "www.baidu.com" http://www.baidu.com 告诉服务器你是从 www.baidu.com 跳转过来的-A/--user-agent:定义 user agent,伪装成一个指定的浏览器,-A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)http://www.baidu.com-b/--cookie:有的网站会查看 cookie 信息来判断是否按规定浏览,-b /cookie.txt http://www.baidu.com 使用本地 cookie.txt 里的 cookie 信息来访问,也可以输入参数和值:-b "name=wade" http://www.baidu.com-c/--cookie-jar:保存操作时生成的 cookie 文件,-c ./cookie.txt http://www.baidu.com-w/--write-out:自定义输出内容,-w %{http_code} -w "time=%{time_total}\n" http://www.baidu.com 打印返回的 http 码和响应时间,还有很多参数可以打印。-u/--user: <user[:password]> 用户名和密码,curl -O -u username:passwd ftp://www.linux.com/file.txt 从 ftp 服务器下载文件(也可以 curl -O ftp://username:passwd@www.linux.com/file.txt)-x/--porxy:上网很多时候需要用到代理服务器,-x 192.168.1.1:8080 http://www.baidu.com 使用代理服务以及端口访问-s/--silent:静音模式

 

    当然,curl 还有很多别的功能,只是列了几个常用的选项,附上一个写的不错的博客:http://www.ruanyifeng.com/blog/2011/09/curl.html,可参考。

 

  • iptables

    可参考《2小时玩转 iptables》pdf

    ipset 是 iptables 的扩展,允许创建一个匹配整个地址的地址集合,而 iptables 仅仅支持线性存储和过滤,地址集合可提高查找的速率。

    #iptables + ipset:centos 默认没有安装 iptables 和 ipsetyum install iptables-services ipset#创建一个新的 ipset,ipset 默认可存储 65536 个 element,可通过选项 maxelem 修改数量ipset create my_ipset hash:nat (maxelem 65536)#查看以创建的 ipset ipset list#添加一个ip 到 ipset 中ipset add my_ipset 192.168.1.1#从 ipset 中去除一个 ipipset del my_ipset 192.168.0.1#在创建 iptables 规则链时使用 ipsetiptables -I INPUT -m set --match-set my_ipset src -p tcp --destination-port 22 -j DROP#删除 ipsetipset destroy my_ipset#将 ipset 规则保存到文件ipset save my_ipset -f my_ipset.txt#从文件中导入 ipset 规则ipset restore -f my_ipset.txt

    ipset 支持动态修改地址集合,哪怕 iptables 正在使用这个集合,这样在生产环境上面就可以很好的管理黑名单列表,而不用重启 iptables 了。

 

  • telnet

    telnet 是一款基于 telnet 协议的远程工具,Telnet 协议是 TCP/IP 协议家族中的一员,是一个远程登录服务的标准协议,但是由于 telnet 采用明文传送报文,没有使用公钥私钥加密,所有大都服务器都没有开放 telnet 服务,而使用加密的ssh 方式。

    一般使用 telnet 大都是检查远程服务器的某个端口是否能访问。

    telnet 192.168.0.1 22

    Telnet 实例还可以将键盘连接到某个目标 TCP 端口,并将此 TCP 端口输出回送到显示屏上,它几乎可以连接所有的 TCP 服务器,包括 HTTP 服务器。

    通过 Telnet 程序直接与 Web 服务器进行对话,通过 Telnet 可以打开一条到某台机器上某个端口的 TCP 连接,然后直接向那个端口输入一些字符,Web 服务器会将 Telnet 程序做为一个 Web 客户端来处理,所有回送给 TCP 连接的数据都会显示在屏幕上。

    步骤:

    1、首先,向 DNS 服务器查找 www.joes-hardware.com 的 IP 地址,打开一条到目标服务器端口 80 的 TCP 连接,当然 Telnet 会为我们完成这些。2、在完成打开一条 TCP 连接后,Telnet 会输出三行内容,告诉我们已经建立了连接。3、接下来就要输入 HTTP 请求了4、请求结束后(由一行空行表示),服务器会在一条 HTTP 响应中将内容返回并关闭连接。

    输出:

    Telnet 虽然可以很好的模拟 HTTP 客户端,但是并不能作为服务器使用,而且 Telnet 做自动化很繁琐,可以使用 nc(netcat)方便的操纵基于 TCP 和 UDP 的流量(包括 HTTP)

 

 

 

 

 

 

 

 

    

        

 

 

 

 

 

    

    

    

 

 

 

 

 

 

 

 

    

转载于:https://my.oschina.net/u/2470065/blog/776719

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SqlServer 备份还原教程

看了众多教程&#xff0c;自己也写个增强记忆&#xff0c;错误地方麻烦指出。 ———————————————————————-备份——————————————————————– 1.打开数据库&#xff0c;成功连接 2.找到要备份的数据库&#xff0c;图中演示备份数据库te…

php通过实现excel导入,php实现excel导入数据

表单页面 if($_POST [import]"导入数据 "){$leadExcel$_POST[leadExcel];//echo $leadExcel;die;if($leadExcel "true"){//echo "OK";die();//获取上传的文件名$filename $_FILES[inputExcel][name];//上传到服务器上的临时文件名$tmp_name $…

深入理解计算机系统----读书笔记

第二部分 信息的表示和处理 信息存储&#xff1a; 二进制&#xff08;0101001&#xff09;&#xff0c; 八进制&#xff0c;十六进制&#xff08;0x32FD&#xff09; 字&#xff08;word size&#xff09;指明整数和指针数据的标称大小&#xff08;normal size&#xff09;&…

FiddlerScript-常用总结

没有用过Fiddler的人应该对FiddlerScript没啥感触&#xff0c;我是真心觉得FiddlerScript对测试有一定的帮助哈。在web前端开发过程中&#xff0c;Fiddler是最常用的一款调试工具&#xff0c;那对于测试来说&#xff0c;对测试来说也是一大利器。在大多数情况下&#xff0c;通过…

OpenStack-Zun 使用

Zun组件简介 Zun是Openstack中提供容器管理服务的组件&#xff0c;于2016年6月建立。Zun的目标是提供统一的Openstack API用于启动和管理容器&#xff0c;支持多种容器技术。Zun原来称为Higgins&#xff0c;后改名为Zun。 Zun计划支持多种容器技术&#xff0c;Docker&#xff0…

【优雅代码】深入浅出 妙用Javascript中apply、call、bind

这篇文章实在是很难下笔&#xff0c;因为网上相关文章不胜枚举。 巧合的是前些天看到阮老师的一篇文章的一句话&#xff1a; “对我来说&#xff0c;博客首先是一种知识管理工具&#xff0c;其次才是传播工具。我的技术文章&#xff0c;主要用来整理我还不懂的知识。我只写那些…

PHP笔记随笔

1.CSS控制页面文字不能复制&#xff1a; body{-webkit-user-select:none;} 2.【php过滤汉字和非汉字】 $sc"aaad....##--__i汉字过滤"; //iconv("UTF-8","GB2312",$sc);utf-8转码 echo $temperegi_replace("[^\x80-\xff]",""…

qt linux 添加库文件路径,Linux下Qt调用共享库文件.so

jvm--4垃圾收集6. 垃圾收集GC (1)当需要排查各种内存溢出,内存泄漏等问题,当GC成为系统达到更高性能的瓶颈时,我们就需要对这些自动化的GC进行监控和调节. (2)PC计数器.本地方法栈.虚拟机栈,随方法或者线 ...GET和POSTAjax与Comet 1. Ajax Asynchronous Javascriptxml :能够向服…

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一、总结 一句话总结&#xff1a;两者都是对表单进行序列化&#xff0c;serializeArray()返回的是json对象&#xff0c;serialize()返回的是json形式的字符串&#xff0c;使用起来都是一样的 1、$&#x…

HDU 2842 Chinese Rings(矩阵高速功率+递归)

职务地址&#xff1a;HDU 2842 这个游戏是一个九连环的游戏。 如果当前要卸下前n个环。由于要满足前n-2个都卸下&#xff0c;所以要先把前n-2个卸下。须要f(n-2)次。然后把第n个卸下须要1次&#xff0c;然后这时候要卸下第n-1个。然后此时前n-2个都已经被卸下了。这时候把前n-2…

硬链接与软连接

linux系统硬链接和软连接&#xff1a; 1文件都由文件名和数据组成&#xff0c;在linux中文件被分为两个部分&#xff1a;用户数据和元数据。用户数据&#xff1a;即文件数据块&#xff0c;记录真实数据的地方。元数据&#xff1a;文件的附加属性&#xff0c;记录文件的大小&…

linux 7.2中文命令,CentOS7如何支持中文显示

1.查看系统是否安装有中文语言包locale -a | grep "zh_CN" 命令含义&#xff1a;列出所有可用的公共语言环境的名称&#xff0c;包含有"zh_CN"若出现图中所示几项&#xff0c;那么说明系统中已经安装了语言包&#xff0c;不需要在安装。含义是&#xff1a;…

html-拖拽

html-拖拽(draggable"true")拖拽的7个事件&#xff1a;> 拖拽块.οndragstartfunction(){console.log("拖拽开始")&#xff1b;}> 拖拽块.οndragfunction(){console.log("拖拽中")&#xff1b;}> 拖拽块.οndragendfunction(){console…

大道至简

道在中国哲学中&#xff0c;是一个重要的概念&#xff0c;表示“终极真理”。此一概念&#xff0c;不单为哲学流派诸子百家所重视&#xff0c;也被宗教流派道教等所使用。大道至简是指大道理&#xff08;基本原理、方法和规律&#xff09;是极其简单的&#xff0c;简单到一两句…

别人7天乐,运维还苦逼值班?

你被点名值班了吗&#xff1f;或者你的朋友、隔壁七大姑八大姨的侄子被点名值班了吗&#xff1f; 国庆将至&#xff0c;大家都开始研究各种度假攻略了&#xff0c;国内游、国外游、地球游、外星游。。。然而总有一票人&#xff0c;默默地职守着 -- tIT 公司运营支撑组/运维组。…

【常用损失函数】

一、Smooth L1 Loss 1.公式&#xff1a; 2.原因&#xff1a; L1损失使权值稀疏但是导数不连续&#xff0c;L2损失导数连续可以防止过拟合但对噪声不够鲁棒&#xff0c;分段结合两者优势。 二、Focal Loss 1.公式&#xff1a; 2.作用&#xff1a; 使得正负样本平衡的同时&#x…

ORA-01940: cannot drop a user that is currently connected解决方法

我们在删除数据库用户时候会碰到如下错误 SQL> DROP USER sys_xj cascade; DROP USER sys_xj cascade*ERROR at line 1:ORA-01940: cannot drop a user that is currently connected 解决方法&#xff1a; 1.查询出还在连接的此用户会话进程 SQL> SELECT SID,SERIAL# FR…

实现对象克隆

实现Serializable接口&#xff0c;通过对象的序列化和反序列化实现克隆&#xff0c;可以实现真正的深度克隆&#xff0c;代码如下 package com.lovo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; i…

linux 读取内存颗粒,linux查看主板内存槽与内存信息的命令dmidecode怎么用

在Linux中&#xff0c;我们常常使用命令来实现许多操作&#xff0c;比如查看内存信息等&#xff0c;下面小编就为大家带来一篇linux查看主板内存槽与内存信息的命令dmidecode方法。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来…

python 图像处理(从安装Pillow开始)

python 图像处理(从安装Pillow开始) python2.x及以下用的是PIL(图像处理库是 PIL(Python Image Library))&#xff0c;最新版本是 1.1.7 可在http://www.pythonware.com/products/pil/index.htm 下载和学习。 不过从该网站可看出它不支持python3.x Pillow由PIL而来(支持3.x)&…