socket 抓包(socket 抓包才能收到数据)

      最后更新:2023-10-09 11:09

      android socket请求数据怎么抓包

      从网络上面搜索到的资料看,要抓取手机中app的网络包有下面几种方式:(1).将tcpdump移植到Android平台,然后在命令行下启动tcpdump进行抓包。Tcpdump程序实际上可以看作是wireshark的命令行版本,将该程序移植到Android平台直接抓包,这是一种最直接的抓包方式,然后将抓获的数据包文件,从手机传到windows系统上用wireshark打开进行分析,这种方式貌似不能用于苹果手机。(2).使用fiddler,在windows系统上打开fiddler软件,该软件会将我们的电脑变成一个代理,然后在手机上设置wifi网络,将代理指定为开启fiddler的那台电脑,并且端口设置为fiddler侦听的8888端口,这时候使用手机访问的数据,就会通过该代理,在fiddler中就可以看到http的数据包。这种方法我试了半天怎么都看不到数据包,不知道哪里出问题了,根据原理,这种方式支持可以通过代理访问网络的手机。所以从原理上说是支持Android和苹果手机的。(3).通过各种方式在pc电脑上建立wifi热点,然后使用wireshark在pc电脑上监视该wifi热点,通过手机连接该热点访问网络。这样wireshark会获取所有流经该热点的数据包这种方式适用于所有能够无线访问的手机,也就是说所有的Android和苹果手机。那么如何在pc电脑上建立wifi热点呢,有这么几种办法:(1).Win7电脑经过设置,可以将无线网卡设置为wifi热点,这种方法我以前用过,可以成功,但是步骤繁琐,而且不一定能够成功,其他的windows系统估计就没戏了。(2).使用软件自动建立wifi热点,不需要自己手工配置,这样的软件有Connectify Hotspot,猎豹免费wifi,360免费wifi软件,这几个软件我都使用过,比较好用,这种方式同样也只能针对有无线网卡的笔记本电脑,原理也是将笔记本电脑上的无线网卡建立热点了,只不过是软件自动的,不需要人工设置,比方法1要方便。注意:经过实验发现,手机连接这种方式建立的热点,所发送的数据,用wireshark去抓包,需要捕获电脑上本身联网的那个“网络连接”,例如我的笔记本上面有一个“本地连接”,该连接是使用有线网络的。我用猎豹免费wifi软件建立一个热点之后,我的电脑上多出一个“无线网络连接3”,可以看到该“无线网络连接3”是猎豹生成的,但是我抓包的时候,wireshark需要捕获“本地连接”上的包,也就是我的手机访问的数据实际上还是使用的“本地连接”,通信IP也是“本地连接”上的IP地址,而在手机的wifi连接设置中看到的ip地址,在我抓的包中也搜不到,也就是说手机通过该热点访问网络,实际上还是使用的“本地连接”的IP地址,至于是什么原理,我目前也不太清楚。但是下面要说的随身wifi硬件则与此不同,随身wifi是建立了网卡。(3).使用随身wifi硬件。这种也是很方便的方法,而且比较稳定,对笔记本电脑和台式机都可以使用。我之前买了一个360的随身wifi(不是打广告,本人对360公司不感冒,但是他的随身wifi做的确实还可以,同事中有买小米wifi的,不太稳定)。只要在360的官网上下载驱动,直接插上随身wifi就可以使用,我推荐使用这种方法。如果你用的是笔记本电脑可以使用方法2,如果是台式机器可以使用方法3。android socket请求数据怎么抓包
      android socket请求数据怎么抓包

      【请问】网络抓包的实现方法

      Windows2000在TCP/IP协议组件上做了很多改进,功能也有增强。比如在协议栈上的调整,增大了默认窗口大小,以及高延迟链接新算法。同时在安全性上,可应用IPSec加强安全性,比NT下有不少的改进。 Microsoft TCP/IP 组件包含“核心协议”、“服务”及两者之间的“接口”。传输驱动程序接口 (TDI) 与网络设备接口规范 (NDIS) 是公用的。 此外,还有许多用户模型应用程序的更高级接口。最常用的接口是 Windows Sockets、远程过程调用 (RPC) 和 NetBIOS。Windows Sockets 是一个编程接口,它是在加州大学伯克利分校开发的套接字接口的基础上定义的。它包括了一组扩展件,以充分利用 Microsoft Windows 消息驱动的特点。规范的 1.1 版是在 1993 年 1 月发行的,2.2.0 版在 1996 年 5 月发行。Windows 2000 支持 Winsock 2.2 版。在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型、服务质量控制等。这里介绍Windows Sockets的一些关于原始套接字(Raw Socket)的编程。同Winsock1相比,最明显的就是支持了Raw Socket套接字类型,通过原始套接字,我们可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。1、创建一个原始套接字,并设置IP头选项。SOCKET sock;sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);或者:s = WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。创建原始套接字后,IP头就会包含在接收的数据中,如果我们设定 IP_HDRINCL 选项,那么,就需要自己来构造IP头。注意,如果设置IP_HDRINCL 选项,那么必须具有 administrator权限,要不就必须修改注册表:HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAfdParameter修改键:DisableRawSecurity(类型为DWORD),把值修改为 1。如果没有,就添加。BOOL blnFlag=TRUE;setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&blnFlag, sizeof(blnFlag);对于原始套接字在接收数据报的时候,要注意这么几点:1、如果接收的数据报中协议类型和定义的原始套接字匹配,那么,接收的所有数据就拷贝到套接字中。2、如果绑定了本地地址,那么只有接收数据IP头中对应的远端地址匹配,接收的数据就拷贝到套接字中。3、如果定义的是外部地址,比如使用connect(),那么,只有接收数据IP头中对应的源地址匹配,接收的数据就拷贝到套接字中。2、构造IP头和TCP头这里,提供IP头和TCP头的结构:// Standard TCP flags#define URG 0x20#define ACK 0x10#define PSH 0x08#define RST 0x04#define SYN 0x02#define FIN 0x01typedef struct _iphdr //定义IP首部{unsigned char h_lenver; //4位首部长度+4位IP版本号unsigned char tos; //8位服务类型TOSunsigned short total_len; //16位总长度(字节)unsigned short ident; //16位标识unsigned short frag_and_flags; //3位标志位unsigned char ttl; //8位生存时间 TTLunsigned char proto; //8位协议 (TCP, UDP 或其他)unsigned short checksum; //16位IP首部校验和unsigned int sourceIP; //32位源IP地址unsigned int destIP; //32位目的IP地址}IP_HEADER;typedef struct psd_hdr //定义TCP伪首部{unsigned long saddr; //源地址unsigned long daddr; //目的地址char mbz;char ptcl; //协议类型unsigned short tcpl; //TCP长度}PSD_HEADER;typedef struct _tcphdr //定义TCP首部{USHORT th_sport; //16位源端口USHORT th_dport; //16位目的端口unsigned int th_seq; //32位序列号unsigned int th_ack; //32位确认号unsigned char th_lenres; //4位首部长度/6位保留字unsigned char th_flag; //6位标志位USHORT th_win; //16位窗口大小USHORT th_sum; //16位校验和USHORT th_urp; //16位紧急数据偏移量}TCP_HEADER;TCP伪首部并不是真正存在的,只是用于计算检验和。校验和函数:USHORT checksum(USHORT *buffer, int size){unsigned long cksum=0;while (size > 1){cksum += *buffer++;size -= sizeof(USHORT);}if (size){cksum += *(UCHAR*)buffer;}cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >>16);return (USHORT)(~cksum);}当需要自己填充IP头部和TCP头部的时候,就同时需要自己计算他们的检验和。3、发送原始套接字数据报填充这些头部稍微麻烦点,发送就相对简单多了。只需要使用sendto()就OK。sendto(sock, (char*)&tcpHeader, sizeof(tcpHeader), 0, (sockaddr*)&addr_in,sizeof(addr_in));下面是一个示例程序,可以作为SYN扫描的一部分。#include #include #include #define SOURCE_PORT 7234#define MAX_RECEIVEBYTE 255typedef struct ip_hdr //定义IP首部{unsigned char h_verlen; //4位首部长度,4位IP版本号unsigned char tos; //8位服务类型TOSunsigned short total_len; //16位总长度(字节)unsigned short ident; //16位标识unsigned short frag_and_flags; //3位标志位unsigned char ttl; //8位生存时间 TTLunsigned char proto; //8位协议 (TCP, UDP 或其他)unsigned short checksum; //16位IP首部校验和unsigned int sourceIP; //32位源IP地址unsigned int destIP; //32位目的IP地址}IPHEADER;typedef struct tsd_hdr //定义TCP伪首部{unsigned long saddr; //源地址unsigned long daddr; //目的地址char mbz;char ptcl; //协议类型unsigned short tcpl; //TCP长度}PSDHEADER;typedef struct tcp_hdr //定义TCP首部{USHORT th_sport; //16位源端口USHORT th_dport; //16位目的端口unsigned int th_seq; //32位序列号unsigned int th_ack; //32位确认号unsigned char th_lenres; //4位首部长度/6位保留字unsigned char th_flag; //6位标志位USHORT th_win; //16位窗口大小USHORT th_sum; //16位校验和USHORT th_urp; //16位紧急数据偏移量}TCPHEADER;//CheckSum:计算校验和的子函数USHORT checksum(USHORT *buffer, int size){unsigned long cksum=0;while(size >1){cksum+=*buffer++;size -=sizeof(USHORT);}if(size ){cksum += *(UCHAR*)buffer;}cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >>16);return (USHORT)(~cksum);}void useage(){printf("******************************************n");printf("TCPPingn");printf("t Written by Refdomn");printf("t Email: refdom@263.netn");printf("Useage: TCPPing.exe Target_ip Target_port n");printf("*******************************************n");}int main(int argc, char* argv[]){WSADATA WSAData;SOCKET sock;SOCKADDR_IN addr_in;IPHEADER ipHeader;TCPHEADER tcpHeader;PSDHEADER psdHeader;char szSendBuf[60]={0};BOOL flag;int rect,nTimeOver;useage();if (argc!= 3){ return false; }if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0){printf("WSAStartup Error!n");return false;}if ((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET){printf("Socket Setup Error!n");return false;}flag=true;if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag))==SOCKET_ERROR){printf("setsockopt IP_HDRINCL error!n");return false;}nTimeOver=1000;if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR){printf("setsockopt SO_SNDTIMEO error!n");return false;}addr_in.sin_family=AF_INET;addr_in.sin_port=htons(atoi(argv[2]));addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);//////填充IP首部ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long));// ipHeader.tos=0;ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));ipHeader.ident=1;ipHeader.frag_and_flags=0;ipHeader.ttl=128;ipHeader.proto=IPPROTO_TCP;ipHeader.checksum=0;ipHeader.sourceIP=inet_addr("本地地址");ipHeader.destIP=inet_addr(argv[1]);//填充TCP首部tcpHeader.th_dport=htons(atoi(argv[2]));tcpHeader.th_sport=htons(SOURCE_PORT); //源端口号tcpHeader.th_seq=htonl(0x12345678);tcpHeader.th_ack=0;tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0);tcpHeader.th_flag=2; //修改这里来实现不同的标志位探测,2是SYN,1是FIN,16是ACK探测 等等tcpHeader.th_win=htons(512);tcpHeader.th_urp=0;tcpHeader.th_sum=0;psdHeader.saddr=ipHeader.sourceIP;psdHeader.daddr=ipHeader.destIP;psdHeader.mbz=0;psdHeader.ptcl=IPPROTO_TCP;psdHeader.tcpl=htons(sizeof(tcpHeader));//计算校验和memcpy(szSendBuf, &psdHeader, sizeof(psdHeader));memcpy(szSendBuf+sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader));tcpHeader.th_sum=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));memcpy(szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader));memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4);ipHeader.checksum=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader));memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));rect=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader),0, (struct sockaddr*)&addr_in, sizeof(addr_in));if (rect==SOCKET_ERROR){printf("send error!:%dn",WSAGetLastError());return false;}elseprintf("send ok!n");closesocket(sock);WSACleanup();return 0;}4、接收数据和发送原始套接字数据相比,接收就比较麻烦了。因为在WIN我们不能用recv()来接收raw socket上的数据,这是因为,所有的IP包都是先递交给系统核心,然后再传输到用户程序,当发送一个raws socket包的时候(比如syn),核心并不知道,也没有这个数据被发送或者连接建立的记录,因此,当远端主机回应的时候,系统核心就把这些包都全部丢掉,从而到不了应用程序上。所以,就不能简单地使用接收函数来接收这些数据报。要达到接收数据的目的,就必须采用嗅探,接收所有通过的数据包,然后进行筛选,留下符合我们需要的。可以再定义一个原始套接字,用来完成接收数据的任务,需要设置SIO_RCVALL,表示接收所有的数据。SOCKET sniffersock;sniffsock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);DWORD lpvBuffer = 1;DWORD lpcbBytesReturned = 0 ;WSAIoctl(sniffersock, SIO_RCVALL, &lpvBuffer, sizeof(lpvBuffer), NULL, 0, & lpcbBytesReturned, NULL, NULL);创建一个用于接收数据的原始套接字,我们可以用接收函数来接收数据包了。然后在使用一个过滤函数达到筛选的目的,接收我们需要的数据包。 如果在XP以上的操作系统,微软封杀了Raw Soccket,只能用wincpap之类的开发包了。
      我觉得对网络内的通信过程由于异常因素导致的数据包丢失,应该在数据链路层! 为了弥补物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错.数据链路的建立,拆除,对数据的检错,纠错是数据链路层的基本任务.
      【请问】网络抓包的实现方法

      ADSL(宽带)上网的情况下,如何用RAW_SOCKET 抓获网络数据包

      你可以下载一个抓包工具
      ADSL(宽带)上网的情况下,如何用RAW_SOCKET 抓获网络数据包

      unix domain socket要如何调试,有类似“抓包”工具吗

      Socks中国使用tsocks可以为任意程序提供socks中国安装tsocks$brewtapadamv/alt$brewinstalltsocks配置tsocks打开配置文件/usr/local/etc/tsocks.conf修改如下local=一9二.一陆吧.0.0/二55.二55.二55.0server=一二漆.0.0.一server_type=5server_port=吧0吧
      有啊 baidu 下linux 嗅探器
      劝君更尽一杯酒
      unix domain socket要如何调试,有类似“抓包”工具吗

      fiddler 怎么抓取scoket

      1、清除电脑上的根证书,WIN+R快捷键,输入:certmgr.msc, 然后回车,查找所有fiddler证书,然后删除。2、清除浏览器上的证书文件 ,此处需要仔细查找带有FiddlerRoot的字样,并删除。3、打开fiddler,点击工具栏中的Tools—>Options,点击Actions,选择最后一项,Reset All certificates,然后关闭。4、打开Fiddler,点击工具栏中的Tools—>Options。5、点击https设置选项,勾选选择项,如下图所示。6、点击Actions,点击第二项:Export Root Certificate to Desktop,这时候桌面上会出现证书FiddlerRoot.cer文件,点击OK设置成功,关闭fiddler。7、重新打开fiddler,就可以用fiddler 抓取scoket了。
      fiddler抓取scoket的具体步骤如下:1、首先打开fiddler,进入到编辑页面中。2、然后点开菜单栏Rule/Custom Rules,在class Handler类里添加如下静态方法:static function OnWebSocketMessage(oMsg: WebSocketMessage) {// Log Message to the LOG tabFiddlerApplication.Log.LogString(oMsg.ToString());}3、保存后,即可抓取到WebSocket数据包,点开数据包,在右侧窗口会多一个WebSocket标签页,抓取效果如下:
      首先,HTTP是建立在TCP协议基础上的,而WebSocket通常也是建立在TCP上,所以说为什么有些网页游戏抓不到包而有些又可以,这仅是因为你使用的抓包工具是针对了HTTP的通信协议。 我先从抽象的层面,举一个可能不太恰当的例子,只为了让不明白HTTP和WebSocket两者之间抓包有何区别的同学大概了解这两个协议的异同。客户端/服务端用C/S简称,我把数据抽象成水流,而HTTP是用水枪传递水流的(无状态),至于WEBSOCKET则是使用水管传递水流(实时)。HTTP通讯方式:客户端C把数据封装好了要交给服务端S,所以把水放到水枪里面,射过去给SS用桶把水挡下来了,然后分析水的成分(数据内容),完成后再把新的水(返回的数据)射回去给C这个过程中,任何人都可以随时在C和S之间用海绵吸一点水然后拿去分析(嗅探数据),或者是直接用桶把水都挡下来分析完后再装到水枪中,模仿C的动作射给S(也就是代理抓包)WEBSOCKET方式:客户端C和服务端S,双方之间先用一条水管连起来(用的是HTTP握手),然后水流都通过这个小水管来传输水管里面一直有水在流动,所以要通讯只需要C或者是S把数据水流放到水管中,则会立刻传输到对方那边这个过程中,要嗅探就比较麻烦了,需要先在水管中先打个洞,然后再把分析器放进去、或者是斩断这个水管在中间接个水表之类的设备去分析水质成分好了,乱说一通完毕,说一下抓取WebSocket的两个工具,都是常见的程序,只是可能很多同学不清楚有这样的功能而已。第一个:Chrome,也就是谷歌的浏览器进入你要抓包的网页,然后按F12打开我们最爱的开发者工具然后点Network,再从过滤器中找到WebSockets(上方或下方的状态栏)选中过滤出来的WebSocket,在弹出来的右边栏中可以找到Frames,里面就是抓到的包如果要看新通讯产生的数据包,则要先点其他的位置比如Headers再点Frames才可以刷新第二个:Fiddler,抓包调试的利器,已经人手一个了吧打开Fiddler,点开菜单栏的Rules,选择Customize Rules...这时会打开CustomRules.js文件,在class Handlers中加入以下代码static function OnWebSocketMessage(oMsg: WebSocketMessage) {// Log Message to the LOG tabFiddlerApplication.Log.LogString(oMsg.ToString());} 保存后就可以在Fiddler右边栏的Log标签里,看到WebSocket的数据包
      针对socket通信,你需要知道连接的三次握手和断开的4次挥手,针对socket通信使用nodejs模拟一个客户端,但前提是你要知道通宵的接口,首先使用socket和服务器握手,接下来你就可以拿到服务器传来的数据包
      fiddler 怎么抓取scoket

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类