首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏开发与安全

    浅谈原始套接字 SOCK_RAW 的内幕及其应用(port scan, packet sniffer, syn flood, icmp flood)

    一、SOCK_RAW 内幕 首先在讲SOCK_RAW 之前,先来看创建socket 的函数: int socket(int domain, int type, int protocol); domain 如果参数对不匹配而且”type" 为 SOCK_RAW,则返回wildcard entry 指针 假设现在这样调用 socket(AF_INET, SOCK_RAW, 30);  则使用pffindproto 二、SOCK_RAW 应用 1、packet sniffer sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_TCP); while(1) {     data_size 上述程序只可以接收tcp 包,当然udp 和 icmp 可以这样写: sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_UDP); sock_raw = socket (AF_INET , SOCK_RAW , IPPROTO_ICMP); 但是不能以为 sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_IP); 就能接收所有种类的

    4.1K00发布于 2017-12-28
  • 来自专栏北京马哥教育

    利用tcpcopy引流做模拟在线测试

    1.代码分析 1) 首先,在链路层或者IP层,在把包交到上一层之前,系统会检查有没进程创建了socket(AF_PACKET,SOCK_DGRAM,…)或socket(AF_INET,SOCK_RAW, …)等类型的套接字(即原始套接字sock_raw),如果有,这个包就会被复制一份并发送到这个socket的缓冲区。 在tcpcopy中不同版本所使用的抓包函数不同,在0.3版本中是: int sock = socket(AF_PACKET,SOCK_RAW,htons(ETH_P_IP)); 而在0.4版本中,用的是 : int sock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP); 以上两个函数分别工作在链路层和IP层,前者会把进来和出去的包都抓取到,后者只 抓取到进来的包。 六、附录 项目主页:http://code.google.com/p/tcpcopy/; Sock_raw:http://sock-raw.org/papers/sock_raw; Netlink:http

    1.6K40发布于 2018-05-03
  • 来自专栏嵌入式随笔

    ARM使用ETH链路层原始数据的方法

    在linux下,首先建立一个接收所有数据的socket socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); 对于多个网卡的需要先绑定网卡 memset(&sl_receive struct sockaddr *)&sl_receive, &addr_len); 发送也一样,建立socket,绑定,然后发送 sock_raw_send = socket(PF_PACKET, SOCK_RAW

    75230编辑于 2022-05-11
  • 来自专栏Pou光明

    不使用ip和port如何进行网络通讯(raw socket应用例子)

    14.04 send(虚拟机,自定义模式 VMnet1) Ubuntu 16.04 recv(虚拟机,自定义模式 VMnet1) 1、send int main() { sock_raw =socket(AF_PACKET,SOCK_RAW,IPPROTO_RAW); if(sock_raw == -1) printf("error in socket"); \n"); while(1) { send_len = sendto(sock_raw,sendbuff,64,0,(const struct sockaddr*)&sadr_ll,sizeof \n"); sock_r=socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL)); if(sock_r<0) { printf("error in

    83830编辑于 2023-09-09
  • 来自专栏python3

    Python socket 实现进程间通

    AF_UNIX用于同一台机器上的进程通信,AF_INET用于IPV4协议的TCP和UDP,AF_INET6用于IPV6协议; type代表套接字类型,一般为SOCK_STREAM,SOCK_DGRAM和SOCK_RAW SOCK_STREAM为流式套接字,用于TCP通信,SOCK_DGRAM为数据报式套接字,用于UDP通信,SOCK_RAW为原始套接字,可以用于处理ICMP、IGMP等网络报文,这是普通套接字无法处理的

    1.3K10发布于 2020-01-03
  • 来自专栏原创分享

    网络函数bind源码分析

    = SOCK_RAW) { // 已经绑定了端口 if (sk->num ! = SOCK_RAW) { /* Make sure we are allowed to bind here. */ cli(); for(sk2 = sk->prot->sock_array

    76100发布于 2019-01-09
  • 来自专栏云计算与大数据

    IPC|网络套接字

    ipv4 因特网域 AF_INET6 ipv6 因特网域 AF_UNIX UNIX 域 参数type 确定套接字的类型,进一步确定通信特征 SOCK_DGRAM 长度固定的,无连接的不可靠报文传递 SOCK_RAW 在AF_INET 通信域中套接字类型SOCK_STREAAM 的默认协议时TCP(传输控制协议) 在AF_INET 通信域中套接字类型SOCK_DGRAM的默认协议时UDP(用户数据报协议) SOCK_RAW

    1.6K30编辑于 2022-04-18
  • 来自专栏程序员

    套接字

    默认协议TCP SOCK_RAW IP协议的数据包接口(IP层接口) SOCK_SEQPACKET 和SOCK_STREAM类似,只不过是报文,而非字节流 字节流是无法分辨报文界限的,而报文传输直接可以获取发送方所发的数据 需要注意的是SOCK_RAW它提供的并非是传输层的套接字接口,它所提供的接口位于TCP/IP协议栈的网络层。也就是说,这时候传输层被越过了,需要应用程序开发者自行设计自己的协议头。

    1.9K00发布于 2019-05-25
  • 来自专栏python3

    Python基础:网络编程socket基

    familyAF_UNIX unix系统进程间传输数据 AF_INETIPv4网络传输数据AF_INET6IPv6网络传输数据typeSOCK_STREAM 流式数据,TCP SOCK_DGRAM数据报式数据,UDP SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造

    99410发布于 2020-01-10
  • 来自专栏原创分享

    深入理解TCP/IP协议的实现之bind(基于linux1.2.13)

    = SOCK_RAW) { // 已经绑定了端口 if (sk->num ! = SOCK_RAW) { /* Make sure we are allowed to bind here. */ cli(); // 遍历哈希表

    82540发布于 2020-03-12
  • 来自专栏黄啊码【CSDN同名】

    system C Language

    失败返回INVALID_SOCKET 套接字类型: SOCK_STREAM:流套接字,使用TCP提供有连接的可靠传输 SOCK_DGRAW:数据包套接字,使用UDP提供无连接的不可靠的传输 SOCK_RAW

    55710发布于 2020-05-29
  • 来自专栏Eureka的技术时光轴

    IPPROTO_IP , IPPROTO_RAW

    对于socket(AF_INET, SOCK_RAW, IPPROTO_IP),其原型为 int socket (int domain, int type, int protocol); 1 参数

    2K20发布于 2019-09-05
  • 来自专栏magicsoar

    windows下的C++ socket服务器(3)

    指定应用程序使用的通信协议的协议族,af一般置为AF_INET(表示internetwork: UDP, TCP等); 第二个参数type为协议的Socket类型,常用的有3种:SOCK_STREAM、SOCK_DGRAM和SOCK_RAW SOCK_RAW称为原始Socket,可以读写ICMP、IGMP、IP报文。前两种类型使用得最多。 第三个参数protocol指定所使用的协议。

    2.3K100发布于 2018-02-06
  • 来自专栏编程驿站

    Python 基于 TCP 传输协议的网络通信实现

    socket , for TCP socket.SOCK_DGRAM 数据报式socket , for UDP socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW 可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

    61810编辑于 2022-08-23
  • 来自专栏技术杂记

    网络编程(二).UDP

    . */ #define SOCK_DGRAM SOCK_DGRAM SOCK_RAW = 3, /* Raw protocol interface. */ #define SOCK_RAW SOCK_RAW SOCK_RDM = 4, /* Reliably-delivered messages. */ #define SOCK_RDM

    91220发布于 2021-09-15
  • 来自专栏linux驱动个人学习

    udev实现热插拔

    msg.msg_namelen=sizeof(sa); 30 msg.msg_iov=&iov; 31 msg.msg_iovlen=1; 32 33 sockfd=socket(AF_NETLINK,SOCK_RAW MonitorNetlinkUevent(); 53 return 0; 54 } 创建socket描述符的时候指定协议族为AF_NETLINK或者PF_NETLINK,套接字type选择SOCK_RAW

    3.4K50发布于 2018-03-07
  • C/C++ 原生套接字抓取FTP数据包

    在Windows平台,可以通过SOCK_RAW套接字类型来创建原始套接字。本文的代码示例基于Winsock2库实现,允许我们以最底层的方式捕获网络数据包。 SOCKET SockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP); 绑定本地IP地址 为了接收网络数据包,我们需要绑定本地IP地址。 = 0) return -1; // 创建原始套接字,过滤IP数据包 SOCKET SockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

    75110编辑于 2023-12-05
  • 来自专栏Linux系统开发

    网络层(L3)​​原始套接字,IPv6,UDP发送数据代码示例

    注意事项: 使用IPPROTO_RAW:socket(AF_INET6, SOCK_RAW, IPPROTO_RAW); 目标端口需要设置为0,否则会报错参数错误,发送失败:dest_addr.sin6 message); // 创建原始套接字,应该使用IPPROTO_RAW,使用IPPROTO_IDP会导致发送的数据异常 int sockfd = socket(AF_INET6, SOCK_RAW

    36510编辑于 2025-08-29
  • 来自专栏岚的工作随笔

    从零开始:Linux 网络基础到聊天室搭建

    Multiprotocol bridge */省略...type类型,相关定义在include/linux/net.henum sock_type {SOCK_STREAM= 1,SOCK_DGRAM= 2,SOCK_RAW 有的则更多用于自定义,SOCK_RAW。protocol协议,和地址族支持一致。Protocol families, same as address families. 比如使用跳过TCP层的SOCK_RAW类型。(注意风险)

    52420编辑于 2024-09-05
  • 来自专栏静默虚空的博客

    [C++]VC自定义发IP包例子

    字符串转入地址 inet_aton(dstip,&toaddr.sin_addr); //字符串转入地址 //建立原始TCP包方式IP+TCP信息包 sock = socket(AF_INET, SOCK_RAW ,IPPROTO_RAW); //IP方式 // sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP); if (sock>0) {printf("

    1.1K20编辑于 2022-05-07
领券