IP
在
ip
协议中,用来标识网络中不同主机的地址
在ip
数据包的头部,有两个ip
地址,源ip
地址,目标ip
地址
IPV4
4
个字节,32
位整数192.168.0.1
IPV6
端口号
用来标识一个进程,告诉操作系统当前的数据包交由哪个进程处理
ip
+端口号,能够标识网络上某一台主机的某个进程
一个端口号只能被一个进程占用
传输层协议(tcp
和udp
)的数据段中,有两个端口号,源端口号,目标端口号
port
2
个字节,16
位整数
pid
表示唯一一个进程,端口号也用来标识进程,区别是什么?
- 进程
ID
是由操作系统内核进行分配和管理的,而端口号则是由通讯协议内核分配并管理的- 通讯协议内核在分配端口时会记录进程
id
,并维持一张对应的表进行管理- 一个进程可以绑定多个端口号,而一个端口号不能被多个进程绑定
网络字节序
内存中的多字节数据相对内存地址有大小端之分
磁盘文件中的多字节数据相对文件中的偏移地址有大小端之分
- 大端,低地址存高位
- 小端,地址值存低位
同样,网络数据流也是有大小端之分
TCP/IP
协议规定:网络数据流应采用大端字节序
1 2 3 4 5 6 7 8 9 10 11 12 |
//将主机数转换成无符号长整形的网络字节顺序 #include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); //将一个无符号长整形数从网络字节顺序转换为主机字节顺序 uint32_t ntohl(uint32_t netlong); //将主机的无符号短整形数转换成网络字节顺序 uint16_t htons(uint16_t hostshort); //将一个无符号短整型数从网络字节顺序转换为主机字节顺序 uint16_t ntohs(uint16_t netshort); |
socket
1 |
int socket(int domain,int type,int protocol); |
domain
名称 | 含义 |
PF_UNIX,PF_LOCAL | 本地通信 |
AF_INET,PF_INET | IPv4 Internet协议 |
PF_INET6 | IPv6 Internet协议 |
PF_IPX | IPX-Novell协议 |
PF_NETLINK | 内核用户界面设备 |
PF_X25 | ITU-T X25 / ISO-8208协议 |
PF_AX25 | Amateur radio AX.25 |
PF_ATMPVC | 原始ATM PVC访问 |
PF_APPLETALK | Appletalk |
PF_PACKET | 底层包访问 |
type
名称 | 含义 |
SOCK_STREAM | Tcp连接,提供序列化的、可靠的、双向连接的字节流 |
SOCK_DGRAM | UDP连接 |
SOCK_SEQPACKET | 序列化包,提供一个序列化的、可靠的、双向的基本连接的数据传输通道,数据长度定常 |
SOCK_RAW | RAW类型,提供原始网络协议访问 |
SOCK_RDM | 提供可靠的数据报文,不过可能数据会有乱序 |
SOCK_PACKET | 专用类型 |
protocol
用于指定某个协议的特定类型,即type类型中的某个类型
通常某些协议中只有一种特定类型,这样protocol参数设置为0
但是有些协议有多种特定的类型,就需要设置这个参数来选择特定的类型
工具
netstat
-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
"参数相同。
tcpdump
tcpdump
- 直接启动
tcpdump
将监视第一个网络接口上所有流过的数据包
- 直接启动
tcpdump -i eth1
- 监视指定网络接口的数据包
tcpdump host aet
- 监视指定主机,打印所有进入或离开
aet
的数据包
- 监视指定主机,打印所有进入或离开
tcpdump host 192.168.1.2
- 指定
ip
,截获所有192.168.1.2
收到的和发出的所有数据包
- 指定
选项 | 说明 |
c | 指定要抓取的包数量 |
i | 指定 tcpdump 需要监听的接口 |
n | 对地址以数字方式显式,否则显式为主机名 |
nn | 此外,把端口显示为数值,否则显示端口服务名 |
xx | 输出包的头部数据,会以 16 进制和 ASCII 两种方式同时输出,更详细 |
v vv vvv | 当分析和打印的时候,产生更详细的输出 |
D | 列出可用于抓包的接口 |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Linux 高性能服务器编程:网络基础编程一11/27
- ♥ 51CTO:C++网络通信引擎架构与实现一09/09
- ♥ Socket:创建TCP客户端10/17
- ♥ 网络I/O 介绍04/28
- ♥ Windows进程通信相关03/10
- ♥ 创建socket环境:hello socket10/16