
linux socket编程
中下游国外我
这个作者很懒,什么都没留下…
展开
-
linux中提供了PF_PACKET接口可以操作链路层的数据
http://blog.sina.com.cn/s/blog_82f2fc28010132og.htmlsock_raw(注意一定要在root下使用)原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对于监听网络的流量和分析是很有作用的.一共可以有3种方式创建这种socket 1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_U转载 2013-10-29 21:21:43 · 2644 阅读 · 0 评论 -
原始套接字SOCK_RAW
http://blog.youkuaiyun.com/newnewman80/article/details/8000404实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM)。而这些数据包都是由系统提供的协议栈实现,用户只需要填充应用层报文即可,由系统完成底层报文头的填充并发送。然而在某些情转载 2015-04-03 20:31:32 · 642 阅读 · 0 评论 -
PF_PACKET AF_INET raw socket 区别
http://blog.chinaunix.net/uid-305141-id-2133755.htmlsocket PF_PACKET sock_raw:->packet_create->dev_add_pack Modify ptype_base|ptype_all:二层协议接收过程:netif_rx->process_backlog->netif_receive_skb:ptype_转载 2015-04-03 20:04:31 · 5113 阅读 · 0 评论 -
kernel中 PF_PACKET 的流程
http://blog.chinaunix.net/uid-22590270-id-3240994.htmlPF_PACKET在内核的流程 套接字创建packet_create() --> 赋值packet_ops 接收流程packet_recvmsg()skb_recv_datagram()__skb_recv_data转载 2015-04-03 20:26:03 · 1636 阅读 · 0 评论 -
多种sock_raw的特点和使用方法
http://baike.haosou.com/doc/3867117-4059824.html(注意一定要在root下使用)原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的.一共可以有3种方式创建这种socket1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接转载 2015-04-03 20:07:35 · 1555 阅读 · 0 评论 -
面试常考题-TCP三次握手与四次握手
http://blog.youkuaiyun.com/dotnetpig/article/details/6776999最近面试了许多家公司,除了百度外,其它公司淘宝等都会问你TCP三次握手到底是什么,为什么是三次握手而不是四次握手呢?大家看完了我这篇文章后,相信一定会找到答案了。1、建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程转载 2015-04-12 14:01:26 · 5131 阅读 · 0 评论 -
SOCKET API和TCP STATE的对应关系__三次握手(listen,accept,connect)__四次挥手close及TCP延迟确认(调用一次setsockopt函数,设置TCP_QUI
http://blog.163.com/xychenbaihu%40yeah/blog/static/13222965520118139252103/在我们学习网络基础时,传输层的协议有TCP和UDP;在Linux网络编程中,我们使用socket API,实现网络通信。那么: socket API 和 TCP 协议中各个状态是如何对应的呢?转载 2015-04-12 10:23:50 · 1095 阅读 · 0 评论 -
socket链接的关闭close和shutdown的区别_TIME_WAIT和CLOSE_WAIT什么时刻出现_如何处理
http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201181410222775/TCP主动关闭连接 appl: close(), --> FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN转载 2015-04-12 13:51:08 · 1122 阅读 · 0 评论 -
linux中网络接口名称限制
Linux中每个网络接口都有一个名称,可以使用ifconfig命令来查询当前系统中的接口。那么这些接口命名时是否有要求或者限制呢,比如格式或者长度限制。从表面上看似乎没有限制可以随意命名,在一般应用场景中也可以正常工作,当在特殊应用场合中就会因为接口名称的原因出现莫名其妙的问题。问题1:接口名称长度过长应用场景:使用网络造包、发包工具进行向外发包时(比如mz工具),原创 2015-09-08 09:40:35 · 2800 阅读 · 0 评论 -
应用程序使用RAW socket从内核中抓取指定协议的数据包流程分析;
应用程序使用RAW socket从内核中抓取指定协议的数据包流程分析;应用程序:int init_sockets(){ struct ifreq ifr; struct sockaddr_ll addr; struct sockaddr_in addr2; drv->sock = socket(PF_PACKET, SOCK原创 2016-08-02 13:19:30 · 3287 阅读 · 0 评论 -
通过IP和socket获取对方的MAC地址
/* * FUNC: Get peer MAC address by socket built * PARAM: sockfd--socket ; buf--MAC address; * RET: 0--OK; else--Fail */int getpeermac(char *ifname, struct sockaddr_in *peerip, int sockfd原创 2014-04-10 15:11:07 · 4914 阅读 · 0 评论 -
errno含义
http://www.myexception.cn/program/1266231.html #define EPERM 1 /* Operation not permitted */操作不允许 #define ENOENT 2 /* No such file or directory */文件/路径不存在 #define ESRCH 3 /* No such process转载 2013-11-12 17:53:07 · 1296 阅读 · 0 评论 -
linux socket编程细节
Q: 编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思?A: 这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时 SO_REUSEADDR 选项非常有用。转载 2013-10-31 14:39:24 · 1100 阅读 · 0 评论 -
SIGPIPE错误
当程序写一个管道或socket时,如果对端连接已经关闭,写操作将返回一个SIGPIPE信号。SIGPIPE信号默认情况下将关闭进程,用户可以通过设置SIGPIPE信号处理函数来防止进程被关闭。if(signal(SIGPIPE, SIG_IGN) == SIG_ERR) {printf("Failed to ignore SIGPIPE signals");}原创 2013-11-01 11:17:56 · 951 阅读 · 0 评论 -
ioctl, struct ifreq, struct ifconf
http://wenku.baidu.com/view/59f4508d680203d8ce2f2412.html转载 2013-11-04 18:07:06 · 725 阅读 · 0 评论 -
linux socket和UDP 源端口绑定
if(((*sockPtr)=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) #error}//绑定源UDP端口{struct sockaddr_in a;a.sin_family = AF_INET;a.sin_addr.s_addr = htonl(INADDR_ANY);a.sin_port = htons(spor原创 2013-11-19 11:09:26 · 5985 阅读 · 0 评论 -
linux 多次创建不同的UDP socket进行通信,最终通信用的UDP 源端口以最后一次创建的socket使用的源端口为准
linux 多次创建不同的UDP socket进行通信,最终通信用的UDP 源端口以最后一次创建的socket使用的源端口为准。一个进程的多个线程使用下面方法分别打开一个UDP socket。if(((*sockPtr)=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) #error比如:次数 | socketid |原创 2013-11-19 11:39:37 · 2423 阅读 · 0 评论 -
linux下ioctl()函数使用的详细说明
http://blog.sina.com.cn/s/blog_510c0ebe0100seee.htmlioctl 函数 本函数影响由fd 参数引用的一个打开的文件。 #includeint ioctl( int fd, int request, ... );返回0 :成功 -1 :出错 第三个参数总是一个指针,转载 2013-11-19 15:32:53 · 1236 阅读 · 0 评论 -
linux C监听本地所有数据包
char buffer[8196];void listen_all_package(){int sock, n;char *ifname = "eth0";struct sockaddr_ll addr;if ((sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))){return FALSE;}memse原创 2013-11-07 14:11:21 · 1772 阅读 · 1 评论 -
linux UNIX socket编程
char serverpath[]="/tmp/serverpath";void unix_socket_server(char *spath){char buffer[BUFSIZE]; struct sockaddr_un servaddr; struct sockaddr_un from; if ((sock原创 2013-11-07 18:46:51 · 881 阅读 · 0 评论 -
socket超时设置
struct timeval sock_timeout = {10,0};int timeout_value;int timeout_value_len = sizeof(timeout_value);if(setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO, (char *)&sock_timeout, sizeof(struct timeval)原创 2013-11-12 15:46:40 · 1066 阅读 · 0 评论 -
使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
http://blog.youkuaiyun.com/chrisniu1984/article/details/7050663我们经常会碰到需要fork子进程的情况,而且子进程很可能会继续exec新的程序。这就不得不提到子进程中无用文件描述符的问题!fork函数的使用本不是这里讨论的话题,但必须提一下的是:子进程以写时复制(COW,Copy-On-Write)方式获得父转载 2016-10-24 13:11:13 · 928 阅读 · 0 评论