IP
在
ip协议中,用来标识网络中不同主机的地址
在ip数据包的头部,有两个ip地址,源ip地址,目标ip地址
IPV44个字节,32位整数192.168.0.1
IPV6
端口号
用来标识一个进程,告诉操作系统当前的数据包交由哪个进程处理
ip+端口号,能够标识网络上某一台主机的某个进程
一个端口号只能被一个进程占用
传输层协议(tcp和udp)的数据段中,有两个端口号,源端口号,目标端口号
port2个字节,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所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Socket:创建TCP客户端10/17
- ♥ 网络I/O 介绍04/28
- ♥ Linux 高性能服务器编程:网络基础编程二11/28
- ♥ Socket:创建TCP服务端10/17
- ♥ Windows进程通信相关03/10
- ♥ Socket基础:TCP篇10/16