网络之tcpdump命令
小白:大牛你好,我现在马上要毕业了,需要找工作。不过我对容器和网络方面的知识还不是很了解,能不能给我讲讲容器的特点和用法?
大牛:好的,容器可以理解为一种轻量级的虚拟化技术,它可以将一个应用及其依赖的库、环境等封装在一个可移植的容器中,并在不同的环境中运行,从而解决了应用部署的依赖性问题。容器具有快速部署、隔离性好、资源利用率高等特点,它广泛应用于云计算、持续集成和交付等领域。
小白:那容器和虚拟机有什么区别呢?
大牛:好问题,容器和虚拟机都是用于虚拟化的技术,不同的是虚拟机会模拟一整套的操作系统,而容器是共享宿主机操作系统的资源,从而实现了更高的资源利用率。举个例子,假设你要在一台机器上同时运行多个应用,如果使用虚拟机,每个虚拟机都需要运行一个操作系统,占用大量资源;而使用容器,所有应用共享宿主机操作系统的资源,可以大大节约资源。
小白:明白了,容器的用处还真是挺多的。那你能不能讲讲tcpdump命令是什么以及它的底层实现呢?
大牛:好的,tcpdump命令是一款网络抓包工具,它可以捕获网络数据包并将其以文本形式输出,是网络调试和分析的常用工具。tcpdump底层实现使用了网络套接字(socket)和原始套接字(raw socket)技术,通过监听网络接口捕获数据包并进行解析。
举个例子,比如你想抓取从你的电脑到服务器的HTTP数据包,可以使用以下命令:
tcpdump -i eth0 port 80 and src host <your_ip_address> and dst host <server_ip_address>
这个命令会在eth0网卡上监听端口80的所有数据包,并只输出源IP地址为你的IP地址,目标IP地址为服务器IP地址的数据包。通过这个命令可以帮助你快速定位网络问题。
小白:原来如此,感谢大牛的解答!你能不能再讲一下代码中的socket和raw socket是怎么用的呢?
大牛:当然可以,socket和raw socket都是用于实现网络通信的技术,它们可以让应用程序通过网络传输数据。
小白:哦,原来如此,那你能不能举一个例子,展示一下socket和raw socket的用法?
大牛:当然可以,以下是一个简单的Python程序,它使用socket模块实现了一个基本的TCP服务器:
import socketHOST = '127.0.0.1'
PORT = 8080server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen(1)print('Listening on port', PORT)while True:client_socket, client_address = server_socket.accept()print('Accepted connection from', client_address)data = client_socket.recv(1024)print('Received', data, 'from', client_address)client_socket.sendall(b'Hello, client!')client_socket.close()
这个程序监听本地的8080端口,并在有新的连接请求时接受连接,读取客户端发送的数据并向客户端发送响应。在这个程序中,socket.socket()函数用于创建一个socket对象,第一个参数指定了网络协议族,第二个参数指定了套接字类型。在这里,我们使用AF_INET协议族和SOCK_STREAM类型,表示使用IPv4和TCP协议进行通信。
类似地,以下是一个使用raw socket实现的简单的网络嗅探器,它可以监听所有网络接口并打印接收到的数据包:
import socket
import structraw_socket = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0003))while True:packet = raw_socket.recvfrom(65535)[0]eth_header = packet[:14]eth = struct.unpack('!6s6sH', eth_header)print('Source MAC:', ':'.join('%02x' % b for b in eth[0]))print('Destination MAC:', ':'.join('%02x' % b for b in eth[1]))ip_header = packet[14:34]ip = struct.unpack('!BBHHHBBH4s4s', ip_header)print('Source IP:', socket.inet_ntoa(ip[8]))print('Destination IP:', socket.inet_ntoa(ip[9]))print('Protocol:', ip[6])print('Data:', packet[34:])
这个程序使用AF_PACKET协议族和SOCK_RAW类型的socket对象,可以直接访问网络帧。程序中使用了struct模块对网络帧进行解析,并打印出一些基本的网络信息。需要注意的是,使用raw socket需要root权限。
小白:非常感谢你的解释和示例代码,让我更加清楚地理解了socket和raw socket的用法。不过我还有一个问题,就是之前你提到了tcpdump命令,它和这些网络通信相关的内容有什么关系呢?
大牛:好问题!tcpdump是一个非常常用的网络抓包工具,可以用来捕获网络接口上的数据包并对其进行分析。它使用的原理和raw socket类似,都是直接访问网络接口来获取数据包。tcpdump可以对数据包进行过滤和解析,并输出相应的结果,这些结果可以帮助我们了解网络通信的细节和问题。
以下是一个简单的tcpdump命令示例,可以捕获所有来自本地8080端口的TCP数据包:
sudo tcpdump -i lo port 8080 and tcp
这个命令使用了-i选项指定了监听的网络接口,这里选择了lo接口,表示监听本地回环接口(loopback interface),也就是本机上的网络接口。-port选项指定了监听的端口,这里选择了8080端口,-tcp选项表示只捕获TCP协议的数据包。
如果有符合条件的数据包被捕获,tcpdump会将它们以文本形式输出到终端上,输出结果包含了源地址、目的地址、协议类型、端口号等信息。tcpdump也支持将输出结果保存到文件中,方便后续分析和处理。
总的来说,socket、raw socket和tcpdump这些工具都是网络通信和调试中不可或缺的工具,它们能够帮助我们更好地理解网络通信的细节和问题。
网络之tcpdump命令相关推荐
- 在linux中使用tcpdump命令 – 监听网络流量
tcpdump命令 – 监听网络流量 tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump命令工作时先要把网卡的 ...
- Linux网络故障排查命令(ifconfig、ping、telnet、netstat、lsof、nc、curl、tcpdump)
目录 ifconfig -s,显示网卡信息的精简列表 -a.up.down 将IP地址绑定到某个网卡,以及解绑操作 ping telnet netstat lsof nc 模拟一个服务器程序和客户端程 ...
- 【网络编程】Linux tcpdump命令详解---编辑中
目录 即看即用 详细说明 简介 输出信息含义 链路层头 TCP 数据包 UDP 数据包 SMB/CIFS 解码 AFS 请求和回应 KIP AppleTalk协议 IP 数据包破碎 时间戳 反向过滤 ...
- linux监控某个端口流量抓包,tcpdump命令 – 监听网络流量
tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump命令工作时先要把网卡的工作模式切换到混杂模式.所以tcpdu ...
- Linux tcpdump命令详解与Wireshark
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- Tcpdump命令的使用与示例——linux下的网络分析
顾名思义,TcpDump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的 ...
- Linux tcpdump命令
一.简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据 ...
- linux dump用法,Linux命令之tcpdump命令用法介绍
Linux tcpdump命令用于倾倒网络传输数据. 执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员. 语法 tcpdump [-adeflnN ...
- 【Linux】一步一步学Linux——tcpdump命令(185)
00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 总结 06. 附录 01. 命令概述 tcpdump命令是一款sniffer工具, ...
最新文章
- CORS 请求未能成功_CORS 测试 提示错误 Reason: header authorization
- ReverseMe-120(base64解码表) 逆向寒假生涯(21/100)
- 十二、“最是真心藏不住,一言一语总关情。”(2021.2.11)
- 未来教育计算机二级01为法律一班,2019年3月计算机二级MSOffice提分试题及答案012...
- STL sector 应用
- Gartner:PaaS 和平台架构领域的 4 大趋势 | 技术头条
- django通过ajax请求接口返回多条数据,并动态生成表格,请求表单后将表格数据并入库
- 火狐浏览器允许ajax,ajax如何解决火狐浏览器或其它非ie浏览器的兼容性问题
- 一个堆排我竟弄了 4 个动画
- 蓝桥杯 BEGIN-4 入门训练 Fibonacci数列
- SVN更新无数次后仍显示Out of date
- iOS UIDatePicker
- 基于Java的智能问答系统
- 高内聚低耦合_拉锥耦合器最强粘接方案
- 计算机导论论文论题,计算机导论专业论文题目 计算机导论毕业论文题目怎么定...
- u盘服务器安装win7系统安装教程,最简单的u盘装win7系统详细教程及步骤
- javascript飞机大战
- 哈佛职场情商课读书笔记
- 为什么需要TCP加速?TCP怎么加速呢?
- eclipse安装图形界面插件