精华内容
下载资源
问答
  • python+scapy 抓解析

    万次阅读 多人点赞 2016-05-09 09:13:09
    python scapy 抓 解析

    最近一直在使用做流量分析,今天把 scapy 部分做一个总结。 python 的 scapy 库可以方便的抓包与解析包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用。

    python scapy 抓包与解析

    转载请注明来自:b0t0w1’blog
    ## 安装

    作为初学者,关心的首先是如何安装,本人电脑系统是 fedora, 建议使用 linux。 推荐下载 pip,直接:(当然得在 su 权限下)

    pip install scapy

    这里写图片描述

    在 terminal 中输入 scapy, 如果有下面形式即安装好了:

    这里写图片描述


    抓包

    from scapy.all import *
    dpkt  = sniff(iface = "wlp7s0", count = 100)

    这里写图片描述

    sniff() 是 scapy 内置函数,有很多参数, 如图:

    这里写图片描述

    这里就不一一解释, iface 参数是网卡信息, 也就是 eth0 之类的, 我这里是 wlp7s0, count 参数是抓取的连接数量, 这里是 100, 还有 filter 参数是过滤等。


    pcap 格式保存

    wrpcap("demo.pcap", dpkt)

    pcap 格式较为通用, 可以将上述抓取的包保存为 pcap,dpkt 是上面抓取的流量变量。


    数据包解析

    这里写图片描述

    可以看到有 94 个 tcp 包, 4个 udp 包, 还有两个其他类型的包。类似于 python 中的 list 类型, 可以使用下标访问, 比如用 python 可写个 for 循环遍历每个连接。长度可以使用 len 计算
    这里写图片描述

    注意这里 dpkt 不是 list 类型, 也不是 string 类型, 因此如果要进行字符串处理,要把它转换为 string 类型,

    这里写图片描述

    scapy强大地方在于可以通过字段来查看每一个字段信息,首先我们看一下它有那些字段:

    这里写图片描述

    可以使用 ls() 查看支持的协议类型,有很多,具体看几个:

    这里写图片描述

    这里写图片描述

    甚至还有硬件信息:

    这里写图片描述

    还有很多, 可以自己去看一下, 不附图了。知道它有那些字段后, 就可以调用了,随便举个例子, 比如第四个连接 dpkt[3]

    这里写图片描述

    它的结构非常清楚,首先是 Ether 层, 然后是 IP 层, 然后是 TCP 层,访问时就按张如图就可以访问各个字段信息。

    要注意的是, 不是所有连接都是这几个层, Ether 是都有的, 但是 udp 连接肯定就没有 TCP 层, 而是改为 udp 层, ARP 包肯定就没有 IP 层, 更没有 TCP 层,如果再 arp 连接使用 dpkt[i][IP] 就会报错, 因为它没有 IP 这一层。python 使用时可以时使用 ether 的 type 判断是不是 IP 包, 使用 ip 的 proto 判断时 tcp 还是 udp。

    访问包中的报文可以使用 dpkt[i][Raw].load 字段, (假设第 i +1 个包有报文信息),同样,如果没有报文信息, 就没有 Raw 这一层,也就没有 load 这一字段。比如这里:

    这里写图片描述

    第六个连接并没有 Raw 数据,访问出错, 第七个有 Raw 数据,可以得到报文信息。


    使用离线数据包

    pcap = sniff(offline = "xx/xx.pcap")`

    转载请注明来自:b0t0w1’blog

    展开全文
  • JSONKit解析包

    千次下载 热门讨论 2012-08-24 15:42:02
    解析网页上json代码的工具,能够很好的被Object-C转换成NSDictionary,十分方便,而且与其他json解析包速度最快
  • pcap包解析

    2020-04-02 11:08:54
    pacp包解析 在接触激光雷达的时候,不可避免的第一步就是看硬件说明书以及调试厂商发的样例数据。一般情况下,厂商在存储硬件的数据包的时候,都是通过存储pacp包实现的,所以如何读取pacp包,并从中解析出真正有用...

    pcap包解析

    在接触激光雷达的时候,不可避免的第一步就是看硬件说明书以及调试厂商发的样例数据。一般情况下,厂商在存储硬件的数据包的时候,都是通过存储pcap包实现的,所以如何读取pcap包,并从中解析出真正有用的数据就变得很重要,接下来我们一步步讲。

    1.pcap包结构

    一个Pcap文件包括“Pcap报头”,“数据区”两个部分,其中数据区又分成多个数据包,每个包有报头和数据两个部分,总体结构可见下图(注意所有字节都是连续的):
    在这里插入图片描述

    1.1 pcap报头

    “Pcap报头”大小为24个字节,具体结构如下图:
    在这里插入图片描述

    各个字段含义:

    Magic(4B): 标记文件开始,并用来识别文件和字节顺序。值可以为0xa1b2c3d4或者0xd4c3b2a1,如果是0xa1b2c3d4表示是大端模式,按照原来的顺序一个字节一个字节的读,如果是0xd4c3b2a1表示小端模式,下面的字节都要交换顺序。现在的电脑大部分是小端模式。

    Major(2B): 当前文件的主要版本号,一般为0x0200

    Minor(2B): 当前文件的次要版本号,一般为0x0400

    ThisZone(4B): 当地的标准事件,如果用的是GMT则全零,一般全零

    SigFigs(4B): 时间戳的精度,一般为全零

    SnapLen(4B): 最大的存储长度,设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将值设置为65535

    LinkType(4B): 链路类型。解析数据包首先要判断它的LinkType,所以这个值很重要。一般的值为1,即以太网。

    常用的LinkType(链路类型):

    类型描述
    0 BSD loopback devices, except for later OpenBSD
    1 Ethernet, and Linux loopback devices
    6 802.5 Token Ring
    7 ARCnet
    8 SLIP
    9 PPP
    10 FDDI
    100 LLC/SNAP-encapsulated ATM
    101 “raw IP”, with no link
    102 BSD/OS SLIP
    103 BSD/OS PPP
    104 Cisco HDLC
    105 802.11
    108 later OpenBSD loopback devices (with the AF_value in network byte order)
    113 special Linux “cooked” capture
    114 LocalTalk

    1.2 数据报头

    数据报头可以有多个,每个数据报头16字节,后面都跟着真正的数据包。如下图所示:

    以下是各个字段含义:

    Timestamp(4B): 时间戳高位,精确到seconds,这是Unix时间戳。捕获数据包的时间一般是根据这个值
    Timestamp(4B): 时间戳低位,能够精确到microseconds
    Caplen(4B): 当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
    Len(4B): 离线数据长度,网路中实际数据帧的长度,一般不大于Caplen,多数情况下和Caplen值一样

    这一步中,一定要根据Caplen决定接下来要读的数据长度,至于为什么要这么做,后面解释。

    1.3 数据

    这里就是抓取到的一个网络包,对于激光雷达一般为以太帧,当然,如果你是分析其他网络包,视具体情况而定。这里以以太帧为例,雷达发送的数据在以太帧的数据部分(ipv4报文)中的数据中,这里有点绕,让我们慢慢解析。

    1.3.1Ethernet帧:

    解析pcap包,获取到一个数据块时,这个数据块就是以太帧,一般结构如下:

    1.目标地址(destination address,DA):6 字节

    2.源地址(source address,SA):6 字节

    3.类型(type)字段:用于辨别上层协议,2 字节(0x08 0x00 为IPv4)

    4.数据(data):64 到1500 字节

    1.3.2 ipv4报文

    以太帧结构中的type决定数据部分存储什么样的报文,我实际使用时为ipv4,所以数据部分为ipv4报文,所以解析以太帧中的数据部分就是解析ipv4报文,ipv4报文头结构如下:

    在这里插入图片描述
    更加详细的解释可以参考

    • 这里有一点需要注意,选项部分有多长,得去查资料,我懒得找,就需要自己解析看看,一般雷达发送的数据存在ipv4报的数据部分,也就是除去报头后剩余的字节,会有一个开始标志,这个开始标志在说明书中一定有说明,这样就可以确定选项部分有多长,然后正确获取雷达发送的数据,然后就可以根据说明书进行一步步解析。

    2.软件解析pcap

    这里用的软件是Wireshark,一个蓝色鱼鳍图标,下载完成后可以直接打开pcap文件,辅助你解析pcap包数据块。下面是打开一个pcap文件后的结果(数据部分为防止泄密,打码了):
    在这里插入图片描述

    软件中已经解析了pcap文件中的每个数据块,最上方显示了所有数据块的大致信息,中间显示了某个数据块的详细信息,下方显示了某个数据块的原始数据。

    • 以太帧头

    • ipv4报头(除 选项 部分)
      在这里插入图片描述

    • ipv4报头(选项部分)

    在这里插入图片描述

    • ipv4数据部分(雷达数据(黄色部分))

    在这里插入图片描述

    3.代码解析(linux)

    #include <math.h>
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <vector>
    int main(int argc, char const *argv[]) {
      /* code */
      FILE *pcap_file;
      if ((pcap_file = fopen("path/to/pcap file", "rb")) == NULL) {
        cout << "cannot open file!\n";
      }
      char buffer[24];
      // read pcap head
      fread(buffer, 24, 1, pcap_file);
      //read 3000 ethernet package
      for (int p = 0; p < 3000; p++) {
        // read package head
        char package_head[16];
        fread(package_head, 16, 1, pcap_file);
        //read package data length
        int package_data_length =
            (int)(unsigned char)package_head[8] +
            ((int)(unsigned char)package_head[9]) * pow(16.0, 2.0) +
            ((int)(unsigned char)package_head[10]) * pow(16.0, 4.0) +
            ((int)(unsigned char)package_head[11]) * pow(16.0, 6.0);
        char package_data[package_data_length];
        fread(package_data, package_data_length, 1, pcap_file);
        //deal package to analysis point
        ReadEthernetPackage(package_data);
      }
      fclose(pcap_file);
      return 0;
    }
    

    4.问题

    1. 为什么要读package head中的长度,以此决定后面的数据长度?

      这是个坑,一定要读,因为有时候雷达厂商发给你的pcap包里面可能包含一些奇奇怪怪的东西,我被坑过。

    展开全文
  • Pcap包解析

    千次阅读 2019-01-31 18:10:20
    一个Pcap文件包括“Pcap报头”,“数据区”两个部分,其中数据区又分成多个数据包,每个有报头和数据两个部分,总体结构可见下: 其中固定大小的为“Pcap报头”和数据包中的“数据报头”。 “Pcap报头”大小...

    之前一直做视觉相关的工作,近期接触激光雷达才发现,激光雷达传感器厂商保存数据的方式一般采用Pcap包的形式,虽然不太清楚为什么要这么做,但不管清不清楚总归只能跟着它这么搞。

    一个Pcap文件包括“Pcap报头”,“数据区”两个部分,其中数据区又分成多个数据包,每个包有报头和数据两个部分,总体结构可见下图:
    在这里插入图片描述
    其中固定大小的为“Pcap报头”和数据包中的“数据报头”。

    “Pcap报头”大小为24个字节,具体内容因为与本人所要内容无关,直接跳过,等有需要再补充。

    “数据报头”大小为16个字节,前8个字节为时间戳数据,9~12字节为数据长度,13~16字节为离线数据长度。如果只想知道数据长度是多少,则只需要读取9~12字节,然后往后面读取其描述的长度即可。

    Pcap包的简单解析c++代码如下:

    #include <iostream>
    #include <opencv2/opencv.hpp>
    #include <Windows.h>
    
    #define BUFLEN 1024*1024
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	uchar *data = new uchar[BUFLEN];//开辟数据区
    	FILE *pcapfile;
    	fopen_s(&pcapfile, "16.pcap","rb");
    	//读取pcap报头
    	fread_s(data, BUFLEN, 1, 24, pcapfile);
    	//循环读取数据包,直到文件末尾
    	while (true)
    	{
    		//数据包头
    		int val=fread_s(data, BUFLEN, 1, 16, pcapfile);
    		if (!val)
    		{
    			break;
    		}
    		long packetLen = data[8] | data[9] << 8 | data[10] << 16 | data[11] << 24;//读取数据区长度
    		//cout << packetLen << endl;
    		//数据区
    		val = fread_s(data, BUFLEN, 1, packetLen, pcapfile);
    		if (!val)
    		{
    			break;
    		}
    		//数据处理
    
    	}
    	//对象释放
    	fclose(pcapfile);
    	delete[]data;
    }
    

    在Windows上,也可以直接用WinPcap来解析,有两种写法:
    写法1:

    #include <stdio.h>
    #include <pcap.h>
    
    #define LINE_LEN 16
    
    void dispatcher_handler(u_char* temp1,const struct pcap_pkthdr* header,const u_char* pkt_data)
    {
    	//打印包信息
    	printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
    	打印包内容
    	//for (int i = 1; (i < header->caplen + 1); i++)
    	//{
    	//	printf("%.2x ", pkt_data[i - 1]);
    	//	if ((i % LINE_LEN) == 0) printf("\n");
    	//}
    	//printf("\n\n");
    }
    
    int main()
    {
    	pcap_t* fp;
    	char errbuf[PCAP_ERRBUF_SIZE];
    	//打开Pcap包
    	if ((fp = pcap_open_offline("1.pcap",errbuf)) == NULL)
    	{
    		return -1;
    	}
    	//读取文件直到结尾
    	pcap_loop(fp, 0, dispatcher_handler, NULL);
    	pcap_close(fp);
    	return 0;
    }
    

    写法2:

    #include <stdio.h>
    #include <pcap.h>
    
    #define LINE_LEN 16
    
    int main()
    {
    	pcap_t* fp;
    	char errbuf[PCAP_ERRBUF_SIZE];
    	//打开Pcap包
    	if ((fp = pcap_open_offline("1.pcap",errbuf)) == NULL)
    	{
    		return -1;
    	}
    	//读取文件直到结尾
    	struct pcap_pkthdr* header;		//报文头
    	const unsigned char* pkt_data;	//报文内容
    	while ((pcap_next_ex(fp, &header, &pkt_data)) > 0)
    	{
    		printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
    	}
    	pcap_close(fp);
    	return 0;
    }
    

    如果要获得IP信息,可以添加相应的代码如下:

    #include <stdio.h>
    #include <pcap.h>
    
    #define LINE_LEN 16
    
    /* 4 bytes IP address */
    typedef struct ip_address
    {
    	u_char byte1;
    	u_char byte2;
    	u_char byte3;
    	u_char byte4;
    }ip_address;
    
    /* IPv4 header */
    typedef struct ip_header
    {
    	u_char	ver_ihl;		// Version (4 bits) + Internet header length (4 bits)
    	u_char	tos;			// Type of service 
    	u_short tlen;			// Total length 
    	u_short identification; // Identification
    	u_short flags_fo;		// Flags (3 bits) + Fragment offset (13 bits)
    	u_char	ttl;			// Time to live
    	u_char	proto;			// Protocol
    	u_short crc;			// Header checksum
    	ip_address	saddr;		// Source address
    	ip_address	daddr;		// Destination address
    	u_int	op_pad;			// Option + Padding
    }ip_header;
    
    int main()
    {
    	pcap_t* fp;
    	char errbuf[PCAP_ERRBUF_SIZE];
    	//打开Pcap包
    	if ((fp = pcap_open_offline("1.pcap",errbuf)) == NULL)
    	{
    		return -1;
    	}
    	//读取文件直到结尾
    	struct pcap_pkthdr* header;		//报文头
    	const unsigned char* pkt_data;	//报文内容
    	ip_header* ih;
    	
    	while ((pcap_next_ex(fp, &header, &pkt_data)) > 0)
    	{
    		ih = (ip_header*)(pkt_data + 14); //length of ethernet header
    		printf("%d.%d.%d.%d -> %d.%d.%d.%d\n",
    			ih->saddr.byte1,ih->saddr.byte2,ih->saddr.byte3,ih->saddr.byte4,
    			ih->daddr.byte1,ih->daddr.byte2,ih->daddr.byte3,ih->daddr.byte4);
    		printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
    	}
    	pcap_close(fp);
    	return 0;
    }
    
    展开全文
  • TCP结构解析

    万次阅读 2019-05-11 11:26:04
    * TCP结构 * 以下是通过Wireshark抓到的一个,依次是物理层、链路层、IP、TCP,下面主要分析TCP层的含义。 Frame 697: 1506 bytes on wire (12048 bits), 1506 bytes captured (12048 bits) on interface 0...

    * TCP包结构

    * 以下是通过Wireshark抓到的一个包,依次是物理层、链路层、IP、TCP,下面主要分析TCP层的含义。

    Frame 697: 1506 bytes on wire (12048 bits), 1506 bytes captured (12048 bits) on interface 0
    Ethernet II, Src: Tp-LinkT_78:7b:ef (20:6b:e7:78:7b:ef), Dst: AsustekC_c1:86:97 (74:d0:2b:c1:86:97)
    Internet Protocol Version 4, Src: static.172.64.69.159.clients.your-server.de (159.69.64.172), Dst: 192.168.0.106 (192.168.0.106)
    Transmission Control Protocol, Src Port: http (80), Dst Port: 60575 (60575), Seq: 624361, Ack: 1, Len: 1452
        Source Port: http (80)                                //源端口号
        Destination Port: 60575 (60575)                //目的端口号
        [Stream index: 0]
        [TCP Segment Len: 1452]
        Sequence number: 624361    (relative sequence number)                //32位序列号
        [Next sequence number: 625813    (relative sequence number)]        
        Acknowledgment number: 1    (relative ack number)                         //32位确认序列号,即发送端希望收到的序列号
        0101 .... = Header Length: 20 bytes (5)                                              //4位首部长度
        Flags: 0x010 (ACK)                                                                            //标志位  ACK置1
            000. .... .... = Reserved: Not set                                                      //保留位
            ...0 .... .... = Nonce: Not set                                                             //新增的
            .... 0... .... = Congestion Window Reduced (CWR): Not set            //新增的
            .... .0.. .... = ECN-Echo: Not set                                                       //新增的
            .... ..0. .... = Urgent: Not set
            .... ...1 .... = Acknowledgment: Set
            .... .... 0... = Push: Not set
            .... .... .0.. = Reset: Not set
            .... .... ..0. = Syn: Not set
            .... .... ...0 = Fin: Not set
            [TCP Flags: ·······A····]
        Window size value: 240                                            //16位窗口大小(用于接收方的流量控制)
        [Calculated window size: 240]
        [Window size scaling factor: -1 (unknown)]
        Checksum: 0xacb5 [unverified]                                  //16位检验和
        [Checksum Status: Unverified]
        Urgent pointer: 0                                                         //16位紧急指针
        [SEQ/ACK analysis]
            [Bytes in flight: 4356]
            [Bytes sent since last PSH flag: 622908]
        [Timestamps]
            [Time since first frame in this TCP stream: 3.239693000 seconds]
            [Time since previous frame in this TCP stream: 0.000001000 seconds]
        TCP payload (1452 bytes)                                         //TCP有效载荷

     

    * 标志位解释  

    •     URG—为1表示高优先级数据包,紧急指针字段有效。
    •     ACK—为1表示确认号字段有效
    •     PSH—为1表示是带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
    •     RST—为1表示出现严重差错。可能需要重现创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。
    •     SYN—为1表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步
    •     FIN—为1表示发送方没有数据要传输了,要求释放连接。

     

    * 下面摘抄一张不错的TCP包结构图:

    展开全文
  • 自己写了一个解析APK的工具,主要可以解析到APK的版本名称,版本号,名,ICON图片。有两个版本,分别支持32位系统和64位系统,前提是系统要有java环境。同时支持单个APK解析和多个APK解析。多个只需要指定文件夹...
  • PES结构解析

    千次阅读 2018-12-10 20:56:34
    PES结构图解: PES前面几个字段填写方法: // 生成 pes 头数据 buffer[0] = 0x00; buffer[1] = 0x00; buffer[2] = 0x01; buffer[3] = (unsigned char)(pes-&amp;amp;gt;stream_id); buffer[4] = ...
  • USB格式解析

    千次阅读 2017-09-08 17:05:15
    数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。 (一)域:是USB数据最小的单位,由...
  • Android 管理流程之解析

    千次阅读 2012-12-12 16:30:22
     管理服务( PackageManagerService)是ANDROID的系统服务之一,主要功能实现应用解析、安装、更新、移动、卸载等服务。  PackageManagerService系统类如下: PackageManagerService类图剖析:  ...
  • jsoup 包解析html

    千次阅读 2018-08-13 13:54:45
    这两天碰到需要请求别人网站接口,然后接口返回来的是一个html的网页形式,所以需要解析网页,所以选择用jsoup来解析,这是一个挺好用的工具吧,反正看了挺多人用的,先贴代码吧。 我这里用的不多的,我是自己用...
  • cJSON格式数据包打包及解析

    千次阅读 2019-08-07 20:54:39
    cJSON是JSON格式在C语言环境下的库,包含cJSON.c和cJSON.h两个文件。 现在大多数的项目数据格式都是采用的量级很小的...解析流程: JSON格式字符串->JSON对象获取成员->数据成员 JSON格式字符串 char *jso...
  • Pycharm下载出错解析

    千次阅读 2018-08-17 00:31:27
    Pycharm下载时报错如下 显示错误信息: module 'pip' has no attribute 'main' 解决方法: 进入Pycharm安装目录后找到如下文件:packaging_tool.py。找到如对应代码位置。 将原先的 def do_...
  • 首先说明,本文章引用了apache官网上的代码,本文章只细讲解利用POISAX解析版本为excel2007以上版本的数据。 我们知道excel2007以上版本采用xml存储格式,我们可以直接修改一个后缀.xlsx为.zip,然后解压文件,...
  • deb 内容解析

    千次阅读 2010-11-02 15:58:00
    deb文件,其实是一种ar文件...它是最后一个成员,在这个文件之后的成员将在安装时被省略掉这里说一下control.tar.gz中的control文件————————————————————在control 中,包含文件的Depends:一般,
  • Jieba分词包解析系列

    千次阅读 2014-11-03 15:07:01
    Jieba分词包解析系列
  • Rtsp之rtp包解析

    千次阅读 2018-09-02 12:47:54
    rtp包解析存在以下问题: 1、包的序号会存在乱序的可能性 2、由于序号是16字节无符号,超过65535之后,会从0开始循环 3、网络会出现丢包情况 4、如何界定一帧数据何时开始,何时结束 解决思路: 一定存在的...
  • Wireshark将udp包作为rtp包解析

    千次阅读 2018-05-17 10:48:10
    最近在使用 Wireshark的时候,由于想要分析一下 rtp数据包的 Seq值,...并提取相关的值,如下所示:但是如果 Wireshark没有抓取到 最开始建立连接时的交互信息,那么之后抓取的数据包只会当做普通的 udp进行处理...
  • Java解析XML的jar+四种解析方法

    热门讨论 2011-08-11 17:34:41
    java解析xml的四种方法的比较,还有四种方法所用到的jar 附带程序例子 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
  • 借助WireShark解析PCAP

    千次阅读 2017-12-16 00:37:20
    3.在java程序中借助WireShark进行解析,在后台查看 目录 [toc]1.什么是pcap 什么是pcap抓 PCAP是一个数据包抓取库, 很多软件都是用它来作为数据包抓取工具的。 WireShark也是用PCAP库来抓取数据包的。PCAP...
  • 当今数据作为一家公司最重要的资产,可被该...通过研究发现,解析离线地图来获取地图数据的方式是不可行的。主要基于以下几点: 离线地图,存在数据加密。在不知道解密方式的情况下,解密的时间成本可能为无限大
  • func Dial(network, address string) (Conn, error) func DialTimeout(network, address string, timeout time.Duration) (Conn, error) func FileConn(f *os.File) (c Conn, err error) func Pipe() (Conn, Conn)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,478,039
精华内容 591,215
关键字:

包图解析