https://www.cnblogs.com/MrYuan/p/5215923.html

https://blog.csdn.net/qq_41787205/article/details/86694417

本机端口查看

打开DOS窗口后,一般我们会先输入“netstat”命令查看简单的统计信息,其中冒号后面的是端口信息:

输入“netstat -nao”命令时可以在最右列显示PID进程序号,以便我们用命令直接结束程序:

输入“netstat -nab”命令可以网络连接、端口占用和程序运行的详细信息

然后用任务管理器看对应的进程。

利用快捷键win+R键打开运行窗口。输入cmd回车打开命令提示符窗口  
1:查看本机开放的端口,即已被占用的端口号。  命令:  netstat -an   
部分结果列表:  
Proto   Local Address           Foreign Address        State

TCP    0.0.0.0:135                0.0.0.0:0                     LISTENING

TCP    0.0.0.0:3473              0.0.0.0:0                     LISTENING

TCP    0.0.0.0:8009              0.0.0.0:0                     LISTENING

Local Addresss 对应的这列,“:”后边即为以开放的端口号。

2:查看某个端口号是否被占用  netstat -ano|findstr  "3306" (注意双引号前面有个空格)

可以看到,输入端口号“3306”和"51016"都没有返回任何值,说明这两个端口没有被占用,

而输入端口号”52475“后看到,出现了2行返回结果,说明这个端口被占用了

3:查看进程号对应的进程名称  tasklist|findstr ”9400“

注意:这里输入的不是端口号,而是后面显示的端口号对应的进程号

可以看到,输入进程号9400后,显示了该进程号对应的进程名,即360se.exe

4:结束进程  tskill 360se.exe

tskill 进程名/进程号

也可以直接在任务管理器中结束,打开任务管理器快捷键:ctrl+shift+ESC  命令:

小知识:Netstat命令用法命令格式:

Netstat -a -e -n -o -s-an-a 表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。

-e 表示显示以太网发送和接收的字节数、数据包数等。

-n 表示只以数字形式显示所有活动的TCP连接的地址和端口号。

-o 表示显示活动的TCP连接并包括每个连接的进程ID(PID)。

-s 表示按协议显示各种连接的统计信息,包括端口号。

-an 查看所有开放的端口

delete和析构函数间的关系及细节

https://blog.csdn.net/wk_bjut_edu_cn/article/details/79149540

https://blog.csdn.net/lzm18064126848/article/details/50392164

  1. #include
  2. #include
  3. using namespace std;
  4. class shape
  5. {
  6. public:
  7. char x;
  8. shape(char m)
  9. {
  10.  
  11. x=m;
  12. cout << "构造"<<endl;
  13. cout <<x<<endl;
  14. }
  15. ~shape()
  16. {
  17. cout << "析构"<<endl;
  18.  
  19. cout<<x<<endl;
  20. }
  21. };
  22. int main()
  23. {
  24. shape a('a');
  25. shape* b = new shape('b');
  26. delete b;
  27.  
  28. system("pause");
  29. return ;
  30. }

当有那句delete b时,运行结果如图,也就是说delete b之后执行了shape的析构函数,而按了任意键之后,会立马闪出一个析构a来,这说明程序执行完成后,即在a所在的作用域结束后,执行了shape的析构函数

而当没有delete b时,运行结果如图,这说明暂时没有执行b的shape析构函数,按了任意键后,跟上面一样,也只会闪出一个析构a来,没有析构b

这说明,直接声明的对象,比如shape a,即在栈上面的对象,所在作用域结束后,会自动执行析构函数,而new出来的在堆上的对象,不调用delete,即使它所在的作用域已经结束,也不会调用析构函数,根据另外一篇文章内所述,可能程序结束后,OS(操作系统)会回收其堆内占用的内存,这样就不知道会干什么,会不会调用析构了。

delete详解:首先调用析构函数,完成类成员的释放,比如类成员有vector也指向了堆上的内存,就需要在析构函数中同样使用delete释放这块内存,或者说它自身处于一个容器当中,就需要在这个容器中erase它

然后再free掉整个对象的内存;

delete b过后,b仍然指向改内存,即地址不变,但指针可能为悬垂指针,访问它可能带来意想不到的结果,也可能正确访问,不确定,所以建议delete后,把指针设置成NULL,后面也可根据指针是否为NULL判断是否可用

inet_addr()将命令行中输入的点分IP地址转换为二进制表示的网络字节序IP地址

inet_ntoa()和上面那个相反

https://blog.csdn.net/bit666888/article/details/81746085

地址转换函数:inet_ntoa() 和 inet_addr()
inet_ntoa():

函数原型:

  1. char *inet_ntoa(struct in_addr);

参数:in_addr是一个结构体,用来表示一个32位的IPV4地址。

  1. struct in_addr{
  2. in_addr_t s_addr;
  3. }

返回值:返回点分十进制的字符串在静态内存中的指针。

点分十进制:

全称为点分(点式)十进制表示法,是IPV4的IP地址标识方法。
IPV4中用4个字节表示一个IP地址,每个字节按照十进制表示为0~255。
点分十进制就是用4个从0~255的数字,来表示一个IP地址。
例如:192.168.1.246

头文件:<arpa/inet.h>

别称:IP地址转换函数。

功能:将网络字节序IP转化成点分十进制IP

网络字节序:网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian(大端)排序方式。

inet_addr():

简介:
inet_addr方法可以转化字符串,主要用来将一个十进制的数转化为二进制的数,用途多余IPV4的IP转化。
函数原型:

  1. in_addr_t inet_addr(const char* cp);

参数:字符串,一个点分十进制的IP地址。
返回值:
若字符串有效,则将字符串转换为32位二进制网络字节序的IPV4地址;否则,为INADDR_NONE
头文件:<arpa/inet.h>
别称:IP地址转化函数。
功能:将一个点分十进制的IP转换成一个长整数型(u_long类型)。

https://www.cnblogs.com/crazyleeyang/articles/2446146.html

sockaddr与sockaddr_in及其使用

 

编了有不少的socket相关的例子了,同时在现在的项目中常用到socket编程,今天突然发现对与socket编程中的地址使用还不是很熟练,于是综合一下网上的资料,详细探讨下.首先要说明的是这里主要探讨struct sockaddr 与struct sockaddr_in两个结构体.在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体定义如下:

  1. typedef unsigned short sa_family_t;
  2. struct sockaddr
  3. {
  4.    sa_family_t sa_family; /* 地址族,一般都是“AF_xxx”的形式,通常用的是AF_INET,2个字节 */
  5. char sa_data[]; /* 14字节的协议地址,包含该socket的IP地址和端口等信息 */
  6. };

这是通用socket地址(共16字节).具体到internet环境下使用的socket的地址为sockaddr_in,二者长度一样,都是16个字节.二者可以进行类型转换.一般情况下,需要把sockaddr_in结构强制转换成sockaddr再传入系统调用函数中.

  1. struct sockaddr_in
  2. {
  3. short int      sin_family;  /* 地址族,形如AF_xxx,通常用的是AF_INET,2字节 */
  4. unsigned short int sin_port; /* 端口号(使用网络字节顺序)2字节 */
  5. struct in_addr    sin_addr; /* 存储IP地址,4字节,就是32位的ip地址 */
  6. unsigned char   sin_zero[]; /* 总共8个字节,实际上没有什么用,只是为了和struct sockaddr保持一样的长度 */
  7. };

struct in_addr其实就是32位IP地址,下面是in_addr的结构:

  1. struct in_addr
  2. {
  3. unsigned long s_addr;
  4. };

还有另一种形式,如下:

  1. struct in_addr
  2. {
  3. union
  4. {
  5. struct{unsigned char s_b1,s_b2,s_b3,s_b4;} S_un_b;
  6. struct{unsigned short s_w1,s_w2;} S_un_w;
  7. unsigned long S_addr;//4字节,32位,按照网络字节顺序存储IP地址
  8. } S_un;
  9. };

关于网络字节顺序:其实数据的顺序是由cpu决定的,与操作系统无关,如 Intel x86结构下,short型数0x1234表示为34 12,int型数0x12345678表示为78 56 34 12(小端数据),如IBM power PC结构下,short型数0x1234表示为12 34,int型数0x12345678表示为12 34 56 78,则为大端数据.在网络传输时需要做好转换,网络字节顺序为大端字节顺序.下面是一些用于转换的函数.

htons:把unsigned short类型从主机序转换到网络序;

htonl:把unsigned long 类型从主机序转换到网络序;

ntohs:把unsigned short类型从网络序转换到主机序;

ntohl:把unsigned long 类型从网络序转换到主机序;

inet_aton(const char *string, struct in_addr*addr):将一个字符串IP地址转换为一个32位的网络序列IP地址

inet_addr:是将一个点分制的IP地址(如192.168.0.1)转换为上述结构中需要的32位IP地址(0xC0A80001),即转换成in_addr,inet_addr()返回的地址已经是网络字节格式,所以无需再调用函数htonl();

inet_ntoa(struct in_addr):返回点分十进制的字符串在静态内存中的指针,所以每次调用 inet_ntoa(),它就将覆盖上次调用时所得的IP地址.

inet_pton(int af, const char *src, void *dst):函数将点分十进制的地址src转换为in_addr的结构体,并复制在dst中.

const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt):转换网络二进制结构到点分十进制类型的地址

例子:

  1. my_addr.sin_family = AF_INET; /* 主机字节序 */
  2. my_addr.sin_port = htons(MYPORT); /* short, 网络字节序 */
  3. my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  4. //还有如此的格式
  5. my_addr.sin_addr.s_addr = inet_addr("192.168.0.1");

一般编程中并不直接针对sockaddr操作,而是使用sockaddr_in来进行操作.要做转换的时候用:(struct sockaddr*)mysock_addr,填值的时候使用sockaddr_in结构,而作为函数的参数传入的时候转换成sockaddr结构就行了.

计算机网络高级软件编程技术P80页

对于抓到的包进行端口过滤或者进行ip地址过滤。

端口号一般http协议是默认80端口,https协议是使用443端口,还有其他的上网查。

然后对于一个网站的ip地址,可以通过在cmd命令行用ping + 网址。比如csdn的使用ping blog.csdn.net可以得到csdn的ip地址。对于tcp头还要在学习一下!!!!!!!!!!!!!!!!!!!

  1. #include<winsock2.h>
  2. #include<iphlpapi.h>
  3. #include <Ws2tcpip.h>
  4. #include<iostream>
  5. #include<conio.h>
  6. #include <time.h>
  7. #define IO_RCVALL _WSAIOW(IOC_VENDOR, 1)
  8. #define BUFFER_SIZE 65535
  9. using namespace std;
  10. typedef pair<int, BYTE> pii;
  11. char localName[];//本地机器名
  12. DWORD dwBufferLen[];//获取主机名
  13. DWORD dwBufferInLen = ;//指向主机信息的指针
  14. DWORD dwBytesReturned = ;//通过主机名获取本地IP地址
  15. char buffer[BUFFER_SIZE];
  16. class CIPNode{
  17. public:
  18. ULONG m_dwSourIpAddr;//源IP地址
  19. ULONG m_dwDestIpAddr;//目的IP地址
  20. BYTE m_chProtocol;//IP包的协议类型
  21. ULONG m_dwCounter;//数据包的数量
  22. CIPNode *pNext;//指向下一类IP节点
  23. CIPNode (ULONG dwSourIp, ULONG dwDestIp, BYTE chPro) {
  24. m_dwSourIpAddr = dwSourIp;
  25. m_dwDestIpAddr = dwDestIp;
  26. m_chProtocol = chPro;
  27. m_dwCounter = ;//初始化数据包个数为1
  28. }
  29. void addCount() {//增加数据包的数量
  30. m_dwCounter++;
  31. }
  32. ULONG getCount() {//取得数据包的数量
  33. return m_dwSourIpAddr;
  34. }
  35. ULONG getSourIpAddr() {//取得源IP地址
  36. return m_dwSourIpAddr;
  37. }
  38. ULONG getDestIpAddr() {//取得目的IP地址
  39. return m_dwDestIpAddr;
  40. }
  41. BYTE getProtocol() {//取得协议类型
  42. return m_chProtocol;
  43. }
  44. };
  45. string getProtocol(BYTE Protocol) //获取协议字段共8位
  46. {
  47. switch(Protocol) //以下为协议号说明:
  48. {
  49. case :
  50. return "ICMP"; //Internet控制报文协议
  51. case :
  52. return "IGMP"; //Internet组管理协议
  53. case :
  54. return "IP in IP"; //移动IP数据封装和隧道
  55. case :
  56. return "TCP"; //传输控制协议
  57. case :
  58. return "EGP"; //外部网关协议
  59. case :
  60. return "UDP"; //用户数据报文协议
  61. case :
  62. return "IPv6";
  63. case :
  64. return "RSVP"; //资源预留协议
  65. case :
  66. return "OSPF"; //Open Shortest Path First 开发式最短路径优先
  67. default:
  68. return "UNKNOW";
  69. }
  70. }
  71.  
  72. class CNodeList {
  73. private:
  74. CIPNode *pHead;//链表头
  75. CIPNode *pTail;//链表尾
  76. public:
  77. CNodeList() {//构造函数
  78. pHead = pTail = NULL;
  79. }
  80. //析构函数,完成类成员的释放。
  81. ~CNodeList() {
  82. //删除链表中的所有节点
  83. if(pHead != NULL) {
  84. CIPNode *pTemp = pHead;
  85. pHead = pHead -> pNext;
  86. delete pTemp;
  87. pTemp = NULL;
  88. }
  89. }
  90. //把新捕获的IP数据包加入链表。
  91. void addNode(ULONG dwSourIp, ULONG dwDestIp, BYTE chPro) {
  92. if(pHead == NULL) {//链表为空
  93. pTail = new CIPNode(dwSourIp, dwDestIp, chPro);
  94. pHead = pTail;
  95. pTail -> pNext = NULL;
  96. }
  97. else {//链表不为空
  98. CIPNode *pTemp;
  99. for(pTemp = pHead; pTemp; pTemp = pTemp -> pNext) {
  100. //如果链表中已存在该类型的IP包,则数据包的个数加1.
  101. if(pTemp -> getSourIpAddr() == dwSourIp
  102. && pTemp -> getDestIpAddr() == dwDestIp
  103. && pTemp -> getProtocol() == chPro)
  104. {
  105. pTemp -> addCount();
  106. break;
  107. }
  108. }
  109. //如果链表中不存在该类型的IP包,则创建新的节点加入链表。
  110. if(pTemp == NULL) {
  111. pTail -> pNext = new CIPNode(dwSourIp, dwDestIp, chPro);
  112. pTail = pTail -> pNext;
  113. pTail -> pNext = NULL;
  114. }
  115. }
  116. }
  117. void print() {
  118. CIPNode *pTemp;
  119. for(pTemp = pHead; pTemp; pTemp = pTemp -> pNext) {
  120. printf("源主机 :%s\n", inet_ntoa(*(in_addr*) (&pTemp -> m_dwSourIpAddr)) );
  121. printf("目的主机:%s\n", inet_ntoa(*(in_addr*) (&pTemp -> m_dwDestIpAddr)) );
  122. cout << getProtocol(pTemp -> m_chProtocol) << endl;
  123. }
  124. printf("OVER\n");
  125. }
  126. };
  127.  
  128. struct IPHEADER {//20-60
  129. BYTE Version_HeaderLength;//版本(4位)+首部长度(4位)
  130. BYTE TypeOfService;//服务类型。计算机网络高级编程技术P76
  131. USHORT TotalLength;//总长度
  132. USHORT Identification;//标识
  133. USHORT Flags_FragmentOffset;//标志(3位)+分片偏移(13位)
  134. BYTE TimeToLive;//生存时间
  135. BYTE Protocol;//协议
  136. USHORT HeaderChecksum;//首部校验和
  137. ULONG SourceAddress;//源ip地址
  138. ULONG DestAddress;//目的ip地址
  139. // BYTE Options//选项
  140. };
  141. //20-60
  142. struct Tcphead{
  143. USHORT SourcePort;//源端口号
  144. USHORT DestPort;//目的端口号
  145. ULONG dwSeq;//序号
  146. ULONG dwAck;//确认序号
  147. BYTE Length;
  148. USHORT flag;
  149. USHORT Window;
  150. USHORT CheckSum;
  151. USHORT Urgent;
  152. // ULONG Options;
  153. };
  154.  
  155. struct Udphead{
  156. USHORT SourcePort;
  157. USHORT DestPort;
  158. USHORT Length;
  159. USHORT CheckSum;
  160. };
  161.  
  162. int cnt;
  163. pii printip(IPHEADER *iphead) {
  164. // cout << "第 "<<cnt++<<" 个IP数据包信息:" << endl;
  165. // cout << "协议版本:" <<(iphead -> Version_HeaderLength >> 4) << endl;
  166. // cout << "首部长度:" << ((iphead -> Version_HeaderLength & 0x0F) << 2) << endl;//单位为4字节,所以乘四。
  167. // cout << "优先级:Priority: " << ((iphead -> TypeOfService) >> 5) << ",服务类型:Service: "
  168. // << (( (iphead -> TypeOfService) >> 1) & 0x0f) << endl;
  169. // cout << "IP包总长度:" << ntohs(iphead -> TotalLength) << endl; //网络字节序转为主机字节序
  170. // cout << "标识:" << ntohs(iphead -> Identification) << endl;//网络字节序转成主机字节序
  171. // cout << "标志位:" << "DF=" << ((iphead -> Flags_FragmentOffset >> 14) & 0x01);
  172. // cout << ",MF=" << ((iphead -> Flags_FragmentOffset >> 13) & 0x01) << endl;
  173. // //共3位,最高位为0;DF禁止分片标识。DF=0,可以分片;DF=1,不能分片。MF:分片标识。
  174. // //MF=0,表示接的是最后一个分片;MF=1,不是最后一个分片。
  175. // cout << "片偏移:" << (iphead -> Flags_FragmentOffset & 0x1fff) << endl;//得到后13位
  176. // cout << "生存周期:" << (int)iphead -> TimeToLive << endl;
  177. // cout << "协议类型:" << getProtocol(iphead -> Protocol) << endl;
  178. // cout << "首部校验和:" << ntohs(iphead -> HeaderChecksum) << endl;
  179. // cout << "源地址:" << inet_ntoa(*(in_addr*)(&iphead -> SourceAddress) ) << endl;
  180. // cout << "目的地址:" << inet_ntoa(*(in_addr*) (&iphead -> DestAddress) ) << endl;
  181. // cout << "==============================================================" << endl << endl;
  182. return make_pair((iphead -> Version_HeaderLength & 0x0F) << , iphead -> Protocol);
  183. }
  184.  
  185. int main() {
  186. clock_t start = clock();
  187. WSADATA wsData;
  188. WSAStartup(MAKEWORD(, ), &wsData);
  189. SOCKET sock;
  190. sock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, , WSA_FLAG_OVERLAPPED);
  191. gethostname(localName, );
  192. HOSTENT *pHost;
  193. pHost = gethostbyname(localName);
  194. sockaddr_in addr_in;
  195. addr_in.sin_family = AF_INET;//设定地址类型
  196. addr_in.sin_port = htons();//设定一个端口。不能是已固定的端口
  197. for(DWORD i = ; pHost -> h_addr_list[i]; i++) {
  198. printf ("IP address %lu:%s\n", i + , inet_ntoa (*(struct in_addr*)pHost->h_addr_list[i]));
  199. }
  200. int ind;
  201. scanf("%d", &ind);
  202. addr_in.sin_addr = *(in_addr *) pHost->h_addr_list[ind];//设置IP地址
  203. bind(sock, (sockaddr *) &addr_in, sizeof(addr_in));//把原始套接字绑定到本机地址上
  204. //设置混杂模式
  205. WSAIoctl(sock, IO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen), dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL);
  206. // ULONG bioarg = 0;
  207. // ioctlsocket(sock, FIONBIO, &bioarg);
  208. CNodeList IpList;
  209. while() {
  210. int nPackSize = recv(sock, buffer, BUFFER_SIZE, );
  211. if(nPackSize > ) {
  212. IPHEADER *pIpHdr;
  213. //通过指针把缓冲区中的内容强制转换为IPHEADER数据结构。
  214. pIpHdr = (IPHEADER *) buffer;
  215. pii x = printip(pIpHdr);
  216. int xx;
  217. in_addr csdn;
  218. csdn.S_un.S_addr = inet_addr("202.202.32.35");
  219. if(x.second == ) {
  220. Tcphead *pTcphdr;
  221. pTcphdr=(struct Tcphead*)(buffer+(x.first));
  222. printf("%d\n", (((pTcphdr -> Length) & 0xF0)>>) * );
  223. printf("源端口%d, 目的端口%d\n", ntohs(pTcphdr -> SourcePort), ntohs(pTcphdr -> DestPort));
  224. if( (pTcphdr -> SourcePort) == ntohs() && (pIpHdr -> SourceAddress) == csdn.S_un.S_addr) {
  225. printf("%s\n", inet_ntoa(*(in_addr*) (&pIpHdr -> SourceAddress) ));
  226. printf("出去%s\n", buffer + (x.first) + (((pTcphdr -> Length) & 0xF0)>>) * );
  227. scanf("%d", &xx);
  228. }
  229. if( (pTcphdr -> DestPort) == ntohs() && (pIpHdr -> DestAddress) == csdn.S_un.S_addr) {
  230. printf("%s\n", inet_ntoa(*(in_addr*) (&pIpHdr -> DestAddress) ));
  231. printf("进来%s\n", buffer + (x.first) + (((pTcphdr -> Length) & 0xF0)>>) * );
  232. scanf("%d", &xx);
  233. }
  234. }
  235. // else if(x.second == 17) {
  236. // Udphead *pUdphdr;
  237. // pUdphdr=(struct Udphead*)(buffer+(x.first*4));
  238. // printf("源端口%d, 目的端口%d\n", pUdphdr -> SourcePort, pUdphdr -> DestPort);
  239. // if(pUdphdr -> SourcePort == 80) {
  240. //
  241. // }
  242. // }
  243. // TCPPORT *tcpPort;
  244. // printf("%d\n", x);
  245. // tcpPort = (TCPPORT *) (buffer + x);
  246. // printf("源端口%u 目的端口%u\n", tcpPort -> SourcePort, tcpPort -> DestPort);
  247. //判断IP包的源IP地址或目的IP地址是否为本地主机的IP地址。
  248. if(pIpHdr -> SourceAddress == addr_in.sin_addr.S_un.S_addr ||
  249. pIpHdr -> DestAddress == addr_in.sin_addr.S_un.S_addr)
  250. {
  251. IpList.addNode(pIpHdr -> SourceAddress, pIpHdr -> DestAddress, pIpHdr -> Protocol);
  252. }
  253. // printf("继续yes/no\n");
  254. // char ch[4];
  255. // scanf("%s", ch);
  256. // if(ch[0] == 'y') continue;
  257. // else break;
  258. }
  259. // if(clock() - start >= 2000) break;
  260. }
  261. IpList.print();
  262. closesocket(sock);
  263. WSACleanup();
  264. return ;
  265. }

http://blog.chinaunix.net/uid-26729093-id-3444880.html?_t=t

https://blog.csdn.net/weixin_34198762/article/details/86037650

c语言用raw socket进行抓包的更多相关文章

  1. socket和抓包工具wireshark

    socket和抓包工具wireshark 最近在学习Python代码中的socket和抓包工具wireshark,故又将socket等概念又学习了一遍,温故而知新: Python代码如下: serve ...

  2. Linux下unix socket 读写 抓包

    Linux下unix socket 读写 抓包-ubuntuer-ChinaUnix博客 http://blog.chinaunix.net/uid-9950859-id-247877.html

  3. python socket+tcp三次握手四次撒手学习+wireshark抓包

    Python代码: server: #!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:server.py import socket # 导入 socke ...

  4. wireshark怎么抓包、wireshark抓包详细图文教程

    wireshark怎么抓包.wireshark抓包详细图文教程 作者:佚名  来源:本站整理  发布时间:2013-05-02 19:56:27 本日:53 本周:675 本月:926 总数:3749 ...

  5. 推荐一些socket工具,TCP、UDP调试、抓包工具 推荐一些socket工具,TCP、UDP调试、抓包工具

    还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有 ...

  6. 推荐一些socket工具,TCP、UDP调试、抓包工具 (转载)

    还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有 ...

  7. 推荐一些socket工具,TCP、UDP调试、抓包工具

    还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有 ...

  8. 基于Linux C的socket抓包程序和Package分析 (一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/guankle/article/details/27538031  測试执行平台:CentOS 6 ...

  9. (转载)基于Linux C的socket抓包程序和Package分析

    转载自 https://blog.csdn.net/kleguan/article/details/27538031 1. Linux抓包源程序 在OSI七层模型中,网卡工作在物理层和数据链路层的MA ...

随机推荐

  1. 一些PC小软件/工具/神器备份

    小巧.有用的工具,提升工作效率. 以下所有软件均在吾爱破解可以找到(善用搜索) everything(本机文件搜索神器) 天若OCR文字识别(强无敌) QQ拼音截屏工具(从QQ拼音/QQ中独立拿出来的 ...

  2. R 常用清洗函数汇总

    目录 1.which() 2.unique() 3.dplyr包 select() filter() arrange() group_by() mutate() transmutate() summa ...

  3. Codeforces 577A - Multiplication Table

    Let's consider a table consisting of n rows and n columns. The cell located at the intersection of i ...

  4. ALSA lib-io plugin

    https://www.alsa-project.org/alsa-doc/alsa-lib/pcm_external_plugins.html External Plugin: I/O Plugin ...

  5. 记录 Docker 的学习过程 (网络篇之跨主机互通)

    下面从node3上操作node3# docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap node3# ...

  6. 记录 shell学习过程(11 ) shell 对输出流的处理

    语法 awk  [options] [BEGIN] {program} [END] [file] 常用命令选项 -F fs 指定描绘一行中数据字段的文件分隔符 默认为空格 -f file 指定读取程序 ...

  7. hadoop 部署在centos 7 上

    一.准备工作  (文章写于 2019-6) 根据官方文档而来,请注意时间,官方可能有更新,以官方文档为准 1. 配置网站参考: http://hadoop.apache.org/docs/r1.0.4 ...

  8. .gitignore文件说明-git提交时可忽略的文件

    在我们平时做项目时,总有一些文件不想提交到服务器的版本管理上 这时就要设置相应的忽略规则,来忽略这些文件的提交 规则 作用/mtk 过滤整个文件夹*.zip 过滤所有.zip文件/mtk/do.c 过 ...

  9. Docker学习笔记三

    4.Docker数据管理 4.1.数据卷 数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似与Linux的mount行为. 特性: 数据卷可以在容器之间共事和重用,容器间传递 ...

  10. Cron表达式及其使用注意事项

    Cron表达式简介 Cron表达式全程Crontab表达式,是描述Crontab定时任务执行周期的一种语法格式.而Cron表达式严格上来说有许多特别的版本.如:Linux的.Spring的.Quart ...