爬虫遇到 Socket,莫慌,肝就完了!

1. 前言

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

相比 HTTP 的短连接通信方式,Socket 可实现客户端和服务器的长连接通信

Fiddler、Charles 只能抓取应用层的数据,如果你想抓其他层,比如:网络层、传输层、数据链路层的数据,强烈建议使用:Wireshark

2. Wireshark 基础

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

2-1  主界面

主界面包含:

  • 菜单栏

  • 工具栏

  • 数据过滤区域

  • 数据列表展示区域

  • 按层次展示数据区域

  • 数据字节区域

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 中进行数据过滤,即可抓取到完整的传输数据

4. 最后

对于移动端 Socket 通讯的数据抓取,如果是 PC,可以将本机作为热点开放出去,然后手机连接热点,wireshark 选择对应的网络端口进行抓包即可

而对于 Mac,建议打开网络共享后,将手机使用 USB 连接进行网络数据的抓取

(0)

相关推荐

  • UC头条:网络协议分析总结

    网络协议分析 ARP协议 协议格式 工作原理 TCP/IP协议簇的层次及OSI/RM模型的网络层次及各层的主要作用及各层的主要协议 TCP/IP协议簇的层次 物理层: 数据链路层 网络层 传输层 应用 ...

  • Wireshark数据抓包分析之传输层协议(TCP协议)

    使用TCP协议传输数据相对来说更安全,因为通信双方拥有一个专属的通信通道,每发送一个数据包都有确认回复,若数据包丢失.如果发送放没收到确认包,就可以重发这个数据包. 最经典的例子就是三次握手.三次握手 ...

  • UDP协议详解

    UDP协议详解

  • 完了,胖子真的不能喝酒了,最新研究发现,胖子喝酒更伤肝

    版权声明:本文首发自瘦龙健康,中国肥胖问题的死磕侠,我已委托"维权骑士"为我的文章进行维权行动. 免责声明:以下的文字,不做任何医疗建议,只做信息分享,请在专业人员的指导下进行. ...

  • 爬虫写完了,运行了,然后呢?

    爬虫这个东西,不是刚需,但是好玩,而且也是很多朋友圈彻底走入编程圈的第一推动力,我也亲自示范过很多有趣的爬虫示例: peerJ期刊探索  这个里面我介绍了R爬虫 生信职位拉勾网爬取-附生信行业职业发展 ...

  • 【关注】地球沙子快用完了?莫慌 人类还有办法!

    根据联合国环境规划署2016年发布报告,仅在2010年全球沙子和砾石开采量已经达到约230亿吨.近日,英国<自然>杂志表示,沙子和砾石的采掘速度已经超过了恢复的速度,地球沙子快用完了! 砂 ...

  • 得了肝囊肿怎么办?莫慌,它只是一个纸老虎。

    看透中医本质,启发中医思维,构建中医系统,全在这里! 专辑1|基础理论,中医入门必学. 专辑2|九种体质调理课程(全是干货) 专辑3|100味中药通俗解读(最新版) 专辑4|365种常见病症调理(精华 ...

  • 经方治疗淋巴癌化療後肝區痛案例

    ◎9-16-2008初診 A.W.C婦人, 61歲,B型肝炎病史,2007年9月發現淋巴癌,六次化療後,出現右脅下持續性尖銳刺痛,左脅間斷刺痛,肝功能指數.病毒數量飆高,四肢未稍麻痛,半夜2點必醒,須 ...

  • 三个穴位,每天10分钟,肝好人轻松:1、...

    三个穴位,每天10分钟,肝好人轻松: 1.太冲穴:肝经的原穴,位于足背大指与食指趾骨结合处,所有肝的毛病,都可以在太冲穴上针灸,帮助疏通经络,解郁疏肝. 如有肝火旺,用泻法,先重后轻.先深后浅,针灸以 ...

  • 肝功检查有4项很关键,2个方法轻松降低指标,养肝其实很简单

    肝脏参与人体多种功能的运转,不仅可以分泌胆汁帮助人体消化,还为人体承担着排毒代谢的重要责任. 肝脏受损后,身体一般没有特别明显的疼痛感,所以肝脏疾病容易被人忽略,耽误治疗时机. 检查肝功,这4项指标很 ...

  • 教你2个小动作,疏通肝、胆经,让你睡眠更好,心情舒畅

    春夏交替时节,许多人会有入睡困难.早醒.心情烦躁郁闷.易怒的情况. 在中医上,我们可以通过敲打推揉经络,来起到一定的保健作用,来缓解这些问题. 今天小薇就要给大家介绍两条经络,经常敲一敲推一推,阳气足 ...

  • 治疗脂肪肝经验方

    调脂化浊丸(刘志明经验方)组成: 制首乌75克,丹参50克,桑葚80克,杭白芍45克,生黄芪75克,党参50克,麦冬45克,生地60克,西洋参60克,南山楂45克,红曲45克,五味子25克. 用法:上 ...