1. 前言

Socket 被称为套接字,是对 TCP/IP 协议的封装,它是传输层和应用层间的抽象层

微信

相比 HTTP 的短链接通讯方式,Socket 可实现客户端和服务器的长链接通讯网络

Fiddler、Charles 只能抓取应用层的数据,若是你想抓其余层,好比:网络层、传输层、数据链路层的数据,强烈建议使用:Wiresharkapp

2. Wireshark 基础

Wireshark 是一个功能很是强大的数据流截取工具,不只能监测 HTTP(S) 请求,还能监测 TCP/UDP 请求,OSI 七层模型上的数据基本上都能被抓取到socket

2-1  主界面tcp

主界面包含:工具

菜单栏oop

工具栏ui

数据过滤区域

数据列表展现区域

按层次展现数据区域

数据字节区域

2-2数据列表展现区域

该区域用于展现通过特定网络端口的报文数据,能够自定义数据列表及显示方式

好比:修改报文时间的显示格式

每一条报文直观显示了:报文编号、时间、源 ip 地址、目标 ip 地址、协议名称、报文长度、报文详细信息(端口号、flags字段)

2-3按层次展现数据区域

该区域与报文对应关系以下:

Frame  对应物理层,通常用于展现物理层的数据帧概况

Ethernet II  对应数据链路层,用于展现数据链路层以太网帧头部信息

Internet Protocol Version 4  对应网络层,用于展现 IP 包头部信息

Transmission Control Protocol  对应传输层,用于展现传输层 T 的数据段头部信息,包含 TCP/UDP 等

Hypertext Transfer Protocol  对应应用层,用于显示应用层的数据信息

2-4 数据过滤区域

数据过滤区域方便咱们对报文进行筛选过滤,快读定位到咱们想要的数据

这里支持经过 ip 地址、端口号、操做符、逻辑运算符、协议名称进行过滤

# 1.经过协议名称过滤

# 好比:只显示tcp协议的数据包

tcp

# 2.经过端口号过滤

# 显示源或者目标协议为tcp,而且端口号为80的数据包

tcp.port == 80

# 2.1 显示源协议名称为tcp,端口号为80的数据包

tcp.srcport == 80

# 2.2 显示目标协议名称为tcp,端口号为80的数据包

tcp.dstport == 80

# 3.ip地址过滤

# 显示源ip地址或者目标ip地址知足条件的数据包

ip.addr == 192.168.1.101

# 3.1 显示源ip地址知足条件的数据包

ip.src == 192.168.1.101

# 3.2 显示目标ip地址知足条件的数据包

ip.dst == 192.168.1.101

# 4.逻辑运算符,包含:and(而且)/or(或者)/not (非)

# 经过ip地址、协议、端口号进行过滤

ip.src == 192.168.0.102 and tcp.port==63068

3. 实战

以常见的 TCP 为例,咱们在本地模拟一个 Socket 通讯过程,而后使用 Wireshark 进行抓包

这里,咱们使用 Python 中的 socket 模块快速撸一个

其中

服务端:绑定本地,并阻塞直到客户端链接上,循环获取客户端发送过来的消息

客户端:经过 ip 地址和端口号链接服务器,向服务端发送消息,并解析服务端发送过来的消息

3-1服务端

import socket

# 服务端的Socket套接字对象

server_socket = socket.socket()

# 绑定地址+ip

server_socket.bind(('192.168.0.102', 6666))

# 监听链接请求

server_socket.listen(5)

# 开始阻塞,等待客户端链接

print('服务端阻塞,等待客户端链接...')

conn, address = server_socket.accept()

while True:

data = conn.recv(1024).decode()

if data == 'exit':

print('通讯结束!')

break

else:

print('接受到客户端-{}发送过来的消息,内容是:{}'.format(address, data))

# 返回消息给客户端

conn.sendall("服务端收到消息!".encode())

# 关闭链接

conn.close()

3-2  客户端

import socket

# 客户端的Socket套接字对象

client_socket = socket.socket()

# 链接Socket服务

client_socket.connect(('192.168.0.102', 6666))

while True:

# 等待用户输入内容

content = input('输入要发送的内容:').strip()

# 发送给Socket服务端

client_socket.sendall(content.encode())

if content == 'exit':

print('客户端终止通讯!')

break

else:

# 接受服务端发来的消息

content_from_server = client_socket.recv(1024).decode()

print('接受到服务端的消息:', content_from_server)

# 关闭链接

client_socket.close()

3-3  抓包

须要注意的是,使用 Wireshark 抓取本机到本机的数据包,须要切换监听网络端口为:Loopback:lo0

运行代码,正常模拟客户端和服务端之间的数据通信

使用协议 + 端口号,在 wireshark 中进行数据过滤,便可抓取到完整的传输数据

c语言 爬虫 socket,爬虫遇到 Socket,莫慌,肝就完了!相关推荐

  1. C++语言实现网络爬虫详细代码

    最近有关注到某论坛在讨论网络爬虫用python或者java等语言写有多么多么好,其实这种没法具体说哪个好,只能说各自有各自的优点,下文就是关于我使用C++语言写的爬虫代码,对于我来说挺简单的,可以供大 ...

  2. c语言linux TCP长连接 socket收发范例 断开自动重连

    原文链接:https://blog.csdn.net/chenhao0568/article/details/103420615 c语言linux TCP长连接 socket收发范例 断开自动重连 改 ...

  3. C语言实现网络聊天室 socket的简单应用

    C语言实现网络聊天室 socket的简单应用 前言:环境是Linux ,使用了 socket和pthread,主要分为服务器端和客户端两部分,服务器端监听端口发来的请求,收到后向客户端发送一个消息,客 ...

  4. 基于python语言,使用爬虫和深度学习来预测双色球(二、模型训练与测试)

    在上一篇博文中(基于python语言,使用爬虫和深度学习来预测双色球(一.数据的准备)),我们完成了数据的准备,通过爬虫的方式将2003年至今的每一期的中奖数据保存到了txt文件中,那么我们现在就开始 ...

  5. golang笔记15--go语言单任务版爬虫

    golang笔记15--go语言单任务版爬虫 1 介绍 2 单任务版爬虫 2.1 获得初始页面内容 2.2 正则表达式 2.3 提取城市和 url 2.4 单任务版爬虫的架构 2.5 Engine 与 ...

  6. linux下c语言使用mac地址进行socket通信

    linux下c语言使用mac地址进行socket通信 server端: #include <unistd.h> #include <stdio.h> #include < ...

  7. 记一次C语言编写的爬虫 wininet 堆糖爬虫

    对 没错 嗯 用C语言写的爬虫 首先,既然是爬虫,当然要能够访问网页,用C访问网页的方法也有很多,这里选择的是一种相对比较方便的wininet,用InternetOpenUrl打开url然后读取数据就 ...

  8. 实战Go语言:并发爬虫-欧阳桫-专题视频课程

    实战Go语言:并发爬虫-84人已学习 课程介绍         基于正则表达式和并发技术的整站爬虫项目: 功能包括:通用正则表达式写法.分页爬取.整站爬取: 技术栈:正则表达式.协程并发.HTTP通信 ...

  9. 用c语言实现网络爬虫,C语言编写网络爬虫

    C语言编写网络爬虫 #include #include #include #include #pragma comment(lib, "ws2_32.lib")//加载网络支持的库 ...

最新文章

  1. php foreach是什么,php中foreach的用法是什么
  2. linux内核页高速缓存,《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写(示例代码)...
  3. js获取本月第几周和本年第几周
  4. ASP.net Xml: ASP.net操作Xml
  5. mysql是否有缓存区_Mysql查询高速缓存区
  6. 网易云信即时通讯推送保障及网络优化详解(三):如何在弱网环境下优化大数据传输
  7. OpenCASCADE绘制测试线束:拓扑命令之拓扑和几何分析
  8. ExcelJS —— Node 的 Excel 读写扩展模块2
  9. 云计算:容器技术变革云计算,SaaS带动CaaS市场
  10. 用命令行方式配置JAVA系统变量
  11. MySQL数据库索引及失效场景
  12. python 可视化项目_python3项目之数据可视化
  13. mysql的十进位,MySQL十进制字段的正确默认值是什么?
  14. python动态心形代码_Python实现酷炫的动态交互式数据可视化,附代码!
  15. 数据结构与算法LeetCode题目索引
  16. 基于服务的多源异构数据整合平台解决方案
  17. java 断点下载_java的断点下载
  18. 51Nod 1737 配对
  19. Disabling usage of PDSC Debug Description
  20. linux下使用tcpdump工具分析UDP报文

热门文章

  1. 100行代码搞定实时视频人脸表情识别(附代码)
  2. 机器人是如何规划路径的?动画演示一下吧
  3. 无人驾驶 | 为什么双目自动驾驶系统难以普及?
  4. 手把手用YOLO做目标检测
  5. SAL-9 获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'...
  6. Linux Ubuntu从零开始部署web环境及项目 -----tomcat+jdk+mysql (二)
  7. java中的NAN和INFINITY
  8. eclipse怎样生成javadoc
  9. sys.stdout.write与sys.sterr.write(二)
  10. EngineRoot是在哪里定义的?