tcp/ip
文章平均质量分 66
hmoon729
这个作者很懒,什么都没留下…
展开
-
自写网卡抓包程序
网上网卡抓包程序已经较多,我也就在这里写下近段时间我的感悟,一作自己整理思路,二为需要的人取用。本文所做的网卡抓包程序类似于简化版wireshark功能。废话不多说,我们开始。我们的目标是获取所有经过本地网卡的报头信息,包括链路层的MAC头,网络层的IP头,传输层的tcp或udp头,以及应用层的http头,并将其完整打印出来。整个思路其实很简单,无非就是获取经过网卡的数原创 2014-05-14 22:43:12 · 2199 阅读 · 0 评论 -
struct ethhdr、ether_header、iphdr、tcphdr、udphdr结构体定义
struct ethhdr {unsigned char h_dest[ETH_ALEN];unsigned char h_source[ETH_ALEN];__be16 h_proto;} __attribute__((packed));struct ether_header{u_int8_t ether_dhost[ETH_ALEN]; // dest原创 2015-04-27 15:31:28 · 5501 阅读 · 0 评论 -
ioctl(sock, SIOCGIFHWADDR, &ifr)获取网卡mac地址
ioctl(sock, SIOCGIFHWADDR, &ifr)获取网卡mac地址ioctl(sock, SIOCGIFINDEX, &ifr)获取网卡接口地址为什么我bind时只需要接口地址而不需要mac地址呢?猜测:是不是mac地址bind也可以,接口地址也可以,两者取一即可,只不过接口地址比较方便。网卡接口索引唯一标记本机上的一块网卡,所以依据此索引,可以定位到本机上指定的一原创 2015-04-27 15:30:49 · 21956 阅读 · 4 评论 -
send() 和recv()
send() 和recv() 系统调用send()的用法如下:int send(int sockfd, const void* msg, int len, int flags); 第一个参数是你希望给发送数据的套接口文件描述符。它可以是你通过socket()系统调用返回的,也可以是通过accept()系统调用得到的。第二个参数是指向你希望发送的数据的指针。第三个参数是数据的字节转载 2015-04-27 15:29:54 · 1470 阅读 · 0 评论 -
TCP/IP协议详解
1、TCP/IP协议栈四层模型 TCP/IP这个协议遵守一个四层的模型概念:应用层、传输层、互联层和网络接口层。 网络接口层 模型的基层是网络接口层。负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。 互联层 互联协议将数据包封装成internet数据报,并运行必要的路由算法。 这里有四个互联协议: 网际转载 2015-04-27 15:29:12 · 837 阅读 · 0 评论 -
多接口使用同一套接词
当在多个网络接口的主机上使用这个套接字时,若要指定接收或发送的接口时可以使用bind进行绑定,这与TCP套接字的操作一样,但其内涵并不相同。绑定时将根据地址结构中的sll_protocal和sll_ifindex分别绑定收发的协议号和接口索引号,接口索引号sll_ifindex为0时表示使用有效的所有接口。接口的sll_ifindex值可以通过ioctl获得,如下面是获得名字为“eth0”的接口的原创 2015-04-27 15:27:58 · 547 阅读 · 0 评论 -
以太网,IP,TCP,UDP数据包分析
ISO开放系统有以下几层:7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层2、TCP/IP 网络协议栈分为应用层(Application)、转载 2015-04-27 15:22:02 · 759 阅读 · 0 评论 -
TCP三次握手中SYN,ACK,Seq三者的关系
TCP(Transmission Control Protocol)传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgen原创 2015-04-27 15:20:36 · 61877 阅读 · 9 评论 -
wireshark基础
抓包软件的基础是为了让你知道网络通信当中客户端与服务器之间如何建立通信,通信建立后数据交换以及断开通信的详细过程而形成的。wireshark功能强大,能够抓到从底层到表层:物理层(Frame)的数据帧、数据链路层(Ethernet II)以太网帧头部信息、网络层(Internet Protocol Version 4)IP报头信息、传输层(Transmission Control Protocol转载 2015-04-27 15:16:52 · 608 阅读 · 0 评论 -
readline函数
在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据。如果应用层协议的各字段长度固定,用readn来读是非常方便的。例如设计一种客户端上传文件的协议,规定前12字节表示文件名,超过12字节的文件名截断,不足12字节的文件名用'\0'补齐,从第13字节开始是文件内容,上传完所有文件内容后关闭连接,服务器可以先调用readn读12个字节,根据文件名创建文件,然后在一个循环中转载 2015-04-27 15:13:53 · 13897 阅读 · 0 评论 -
bind()函数 精辟解析
一旦你有一个套接字,你可能要将套接字和机器上的一定的端口关联 起来。(如果你想用listen()来侦听一定端口的数据,这是必要一步--MUD 告 诉你说用命令 "telnet x.y.z 6969"。)如果你只想用 connect(),那么这个步 骤没有必要。但是无论如何,请继续读下去。 这里是系统调用 bind() 的大概: #include ; #include ; int b转载 2015-04-27 15:13:02 · 578 阅读 · 0 评论 -
I/O非阻塞函数实践:select
用select函数实现服务器的并发处理原创 2014-06-04 14:45:51 · 635 阅读 · 0 评论 -
I/O非阻塞函数实践:epoll
epoll函数是poll函数的改良版,同样与原创 2014-06-05 00:46:41 · 615 阅读 · 0 评论 -
修改socket可打开的最大套接词个数
测试select, poll, epoll函数可支持的最大原创 2014-06-04 14:19:10 · 1162 阅读 · 0 评论 -
I/O非阻塞函数实践:poll
接上一篇文章,以poll函数实现并发请求。通过上一篇的测试我们ke'zhi原创 2014-06-04 15:38:50 · 615 阅读 · 0 评论 -
tcp与udp缓冲区大小总结
1.tcp收发缓冲区默认值 [root@localhost /]# cat /proc/sys/net/ipv4/tcp_rmem4096 87380 419430487380 :tcp接收缓冲区的默认值 [root@localhost /]# cat /proc/sys/net/ipv4/tcp_wmem4096 16384 4194304163转载 2015-04-27 15:32:19 · 1886 阅读 · 0 评论