使用Java抓取Socket通信TCP数据包

使用WireShark默认使用的是winpcap去抓本地环回的数据包,需要安装npcap再在Wireshark选择本地环回的网卡抓包

在Java-Socket中,在本地Socket不使用127网段无法与服务端进行通信。

但是常用的Jcap和Pcap4j都是依据libpcap/winpcap实现的。但是这俩又抓不到本地127网段的数据包。

所以选择在局域网中使用两台设备进行数据传输并抓取相应数据包

抓包需要使用的winpcap地址:www.winpcap.org/

使用Pcap4j的Maven依赖

org.pcap4j

pcap4j-core

1.7.5

org.pcap4j

pcap4j-packetfactory-static

1.7.5

123456789101112复制代码

服务端:import org.pcap4j.core.*;

import org.pcap4j.packet.Packet;

import java.io.IOException;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

public class TCPServer {

public static void Pcap4j(InetAddress addr){

{

//1.Pcap抓取不 了本地127的包

//2.本地Socket不用127网段的包无法与服务端通信

try {

PcapNetworkInterface nif = Pcaps.getDevByAddress(addr);

int snaplen = 64 * 1024;

int timeout = 50;

//初始化抓包器

PcapHandle.Builder phb = new PcapHandle.Builder(nif.getName()).snaplen(snaplen)

.promiscuousMode(PcapNetworkInterface.PromiscuousMode.PROMISCUOUS).timeoutMillis(timeout)

.bufferSize(1 * 1024 * 1024);

PcapHandle handle = phb.build();

/** 设置TCP过滤规则 */

String filter = "tcp and port 7788";//过滤条件是tcp数据包,端口号为7788

handle.setFilter(filter, BpfProgram.BpfCompileMode.OPTIMIZE);

PacketListener listener = new PacketListener() {

@Override

public void gotPacket(Packet packet) {

System.out.println(packet);

System.out.println("-----------------------------------------");

}

};

handle.loop(3, listener);//loop里设置抓3个数据包,要无限抓设置-1

} catch (Exception e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) throws IOException, PcapNativeException, NotOpenException {

ServerSocket serverSocket=new ServerSocket(7788);

System.out.println("建立服务端");

InetAddress addr=InetAddress.getLocalHost();

Pcap4j(addr);

Socket socket=serverSocket.accept();

System.out.println("连接成功");

socket.close();

serverSocket.close();

}

}

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950复制代码

客户端:import java.io.*;

import java.net.Socket;

public class TCPClient {

public static void main(String[] args) throws IOException {

Socket socket=new Socket("192.168.43.15",7788);

System.out.println("客户端连接成功");

socket.close();

}

}

12345678910复制代码

运行结果:

java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  3. C++socket编程(三):3.6 服务端recv客户端发送的数据

    服务端中获取客户端发送过来的数据一定是关闭套接字之前进行,close之后就收不到数据了. 一般读取数据一般用read,windows上一般用recv(本质上也是read),但是为了跨平台,所以一般用r ...

  4. java jsoup爬动态网页_使用Jsoup+HtmlUnit抓取动态网页数据

    最后更新日期为2018.1.3 只为自己留个记录 待添加功能: 1.获取历史全部消息 2.爬取大于10条数据 3.自定义抓取公众号信息 package cc.buckler.test; import ...

  5. socket客户端和服务器通信协议,51. Socket服务端和客户端使用TCP协议通讯

    Socket服务器是网络服务中常用的服务器.使用 go 语言实现这个业务场景是很容易的. 这样的网络通讯,需要一个服务端和至少一个客户端. 我们计划构建一个这样的通讯过程.服务端启动后等待客户端的访问 ...

  6. 【转】DICOM通信 - PDU数据包(2)

    转自:DICOM通信 - PDU数据包(2)_翼遥君的博客-CSDN博客 DICOM通信-PDU数据包(1)博客中主要分析了DICOM通信协议的连接协商请求和连接协商应答. 在7个PDU数据包中还有5 ...

  7. Java中Socket通信-服务端和客户端双向传输字符串实现

    场景 什么是socket 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机 ...

  8. 网络编程—使用C语言实现发送TCP数据包,以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port;(原理和常见错误分析)

    任务要求: 1.以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port: 2.头部参数自行设定,数据字段为"This is my h ...

  9. socket.io服务端是java_SpringBoot(23) 集成socket.io服务端和客户端实现通信

    @Slf4j @Service(value = "socketIOService") public class SocketIOServiceImpl implements ISo ...

最新文章

  1. Hive将查询结果保存到另一张表中
  2. 清华大学数学教授吐槽不会做孙子的小学奥数:这学的不是数学,是戏法
  3. bash --config command not found 报错
  4. 3个阶段 项目征名_项目管理的3个关键动作:启动、推进、复盘
  5. Source Insight3.x注册码
  6. oracle表空间名字忘了,忘记Oracle用户名密码、及表空间对应的数据库文件地址
  7. sql server 提取汉字/数字/字母的方法
  8. Python FastAPI 微信公众号后台服务器验证
  9. 【安信可首款4G模组CA-01直连阿里物联网平台②】一机一密认证方式连接
  10. matlab学霸表白公式,一个理科学霸的表白:数学公式的超酷表白
  11. HTML期末学生大作业-节日网页作业html+css+javascript
  12. java poi 导出excel设置数据有效性
  13. 中国半导体要从点到面,存储器为何是最好下手点?
  14. 视频教程-Spring Data JPA项目-Java
  15. 关于Adams驱动函数单位与符号d的问题
  16. 用php制作微信小程序,微信小程序 自己制作小组件
  17. JavaWeb、Tomcat、jquery:Failed to load resource: the server responded with a status of 500 ()
  18. h61 nvme硬盘_英特尔E3处理器网友发来咨询:H81B85老主板上NVME固态支持5775C
  19. 所谓的世纪迷题,连大名鼎鼎的爱因斯坦也曾为此题大伤脑筋?
  20. 函数极限存在准则:夹逼准则

热门文章

  1. php内核探索 [转]
  2. iOS发展系列II - UILabel 使用摘要
  3. [转]关于内存泄露测试工具
  4. 堆排序可运行完整C语言,Java语言,python实现
  5. 人口增量超过北上广!二线城市是怎样逆袭的?
  6. 数据科学最常用流程CRISP-DM,终于有人讲明白了
  7. 近 5 亿人的隐私,毁于一位程序员之手?
  8. 数据分析实例:企业需要什么样的数据分析人才?
  9. STM32之独立看门狗原理
  10. python管理系统web版_【程序源代码】python web 管理系统开发框架