使用 Scapy 与 C 套接字对话

2024-01-12

我有一个 UDP 连接并在端口(localhost)上侦听,并且我也尝试从 localhost 发送 Scapy 数据包。由于某种原因,我的 C 代码从未真正捕获数据包,但我可以很好地看到数据包显示在 Wireshark 中。我已经有一段时间没有使用套接字了,但是我是否必须设置一些特殊的套接字选项,或者为什么我能够在 Wireshark 中正常看到数据包,但不能通过 C 套接字看到数据包?

注意:当我编写相应的套接字代码来发送数据包(从本地主机)时,我能够成功捕获数据包,但是当从另一台计算机发送时,我仍然无法获取侦听代码来捕获数据包。

我找到了一个类似的问题 https://stackoverflow.com/questions/12062781/how-to-make-netcat-display-payload-of-packet但是当我尝试他们的方法(使用UDP而不是TCP)时,我仍然无法让netcat捕获Scapy数据包。

C 代码(为了清晰起见,进行了精简)

int main() {
    int sock, dataLen, inLen;
    struct sockaddr_in inAddr;
    short listen_port = 8080;
    char buffer[2048];

    if (sock = socket(AF_INET,SOCK_DGRAM,0) < 0) {
        printf("ERROR: unable to establish socket\n");
    return -1;
    }

    // zero out address structure
    memset(&inAddr, 0, sizeof(inAddr));

    inAddr.sin_family = AF_INET;
    inAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    inAddr.sin_port = htons(listen_port);

    if (bind(sock, (struct sockaddr*)&inAddr, sizeof(inAddr)) < 0) {
    printf("ERROR: unable to bind\n");
    return -1;
    }

    inLen = sizeof(inAddr);

    printf("Now listening on port %d\n", listen_port);
    while(1) {
    dataLen = recvfrom(sock, buffer, 1500, 0, (struct sockaddr*)&inAddr, &inLen);

    if (dataLen < 0)
        printf("Error receiving datagram\n");
    else
        printf("Received packet of length %d\n", dataLen);

    }
    return 0;
}

Scapy脚本

# set interface
conf.iface="lo0"

# create IP packet
ip_pkt = IP()/UDP()
ip_pkt.payload = "payload test message"
ip_pkt.dport = 8080
ip_pkt.dst = "127.0.0.1"
ip_pkt.src = "127.0.0.1"

# send out packet
send(ip_pkt)

Scapy 需要稍微不同的配置才能在 Loopback 接口上工作,请参阅http://www.secdev.org/projects/scapy/doc/troubleshooting.html http://www.secdev.org/projects/scapy/doc/troubleshooting.html在标题“我无法 ping 通 127.0.0.1。 Scapy 不适用于 127.0.0.1 或环回接口"

我使用那里给出的代码并发送了一个 scapy 数据包,该数据包由 C 套接字接收,具体如下:

from scapy.all import *
conf.L3socket=L3RawSocket
packet=IP()/UDP(dport=32000)/"HELLO WORLD"
send(packet)

然后,该数据在绑定到端口 32000 的 UDP C 套接字上接收(Scapy 默认通过环回接口发送 IP 数据包)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Scapy 与 C 套接字对话 的相关文章

  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 无法将 std::min 传递给函数,std::min 的副本有效

    Passing std min函数无法编译 我复制了 libcpp 声明std min进入我的源文件并且它可以工作 std 版本有什么问题 clang 和 gcc 也会发生同样的情况 在 Godbolt 上测试 https godbolt
  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • “必须声明标量变量”错误[重复]

    这个问题在这里已经有答案了 必须声明标量变量 Id SqlConnection con new SqlConnection connectionstring con Open SqlCommand cmd new SqlCommand cm
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS

随机推荐

  • asp.net core 控制器操作路由使用编码斜杠来确定路由(仅限 IIS)

    我有一个 asp net core 2 2 mvc 操作方法和GET来自客户端 JavaScript 代码 Route search searchterm public IActionResult Search string searcht
  • SQL Server:如何创建存储过程

    我正在从一本书中学习 sql 并且正在尝试编写一个存储过程 但我不相信我做得正确 以下方式在 Microsoft SQL 中无效吗 如果不是 那么什么时候有效 如果有效 create procedure dept count in dept
  • PyCharm 可以自动生成 __eq__() 和 __hash__() 实现吗?

    我是 PyCharm 新手 但也是 IntelliJ 的长期用户 在IntelliJ中 当你编写类定义时 IDE可以自动生成构造函数 equals 方法 以及hashCode 基于实例变量的方法 这不仅有利于节省打字 还可以防止无意的错误并
  • MVC 中的自定义验证未在部分视图上执行

    所以我有强类型的文件上传输入 下面是model class public class UploadImageAlbum CustomFileValidator public HttpPostedFileBase Images get set
  • 当代码位于库中时,S4Vectors 出现 do.call 错误“第二个参数必须是列表”

    这是在另一个问题的背景下提出的一个问题 使用列名称向量提取数据框之类的对象的多列并将其粘贴在一起 https stackoverflow com questions 40789601 我收到了基于使用情况的答案do call当代码是库的一部
  • 如何更改将“editor.insertSpaces”设置为“auto”的每种语言配置

    我使用 VS Code 来编辑多种语言 主要是 Ruby PHP 和 Javascript 的项目 对于每种语言 我们有不同的缩进模型 空格 制表符和宽度 看起来 VS Code 支持这一点 因为它允许两者editor insertSpac
  • Android 模拟器与真实设备

    开发人员应该注意哪些差异 我知道这些限制 预装软件 真实设备可以比模拟器预装更多的应用程序 您无法在模拟器中使用 捕获 照片 视频功能 根据模拟器文档 http developer android com guide developing
  • 而是触发器或计算列?哪个更好?

    我想知道下面两种方法之间是否存在性能差异 基本上 问题是我们允许在 id 中使用空格和破折号 但某些遗留应用程序无法使用它们 因此它们被删除 据我所知 最简洁的方法是在触发器中或作为计算列 SQL 如下所示 已清理并匿名 因此如果出现错误
  • Django模型继承和管理系统

    我正在尝试构建一个系统来管理页面中各种类型的内容 例如 页面可以具有文本内容 超链接内容 视频内容等 在我的建模代码中 我有一个基类 class ContentItem models Model title models CharField
  • TypeError: 恰好需要 1 个参数(给定 2 个)Python 错误

    问题是我有这个功能 def fuerza repulsion x area 100 100 k math sqrt area len self grafo 0 return k 2 x c2 在这一行中 f mod self fuerza
  • 指定数据库时出现身份验证失败错误

    我正在尝试连接到mongodb来自我的网络应用程序 但是 我得到一个auth failed error当我指定要连接的数据库时 来自 mongo 如果我不指定数据库 则连接成功 我已经检查了拼写以及数据库是否使用 mongo 命令行退出sh
  • Pandas(python):列中的最大值定义新列中的新值

    我有一个大约有 50 列的 df Product ID Cat1 Cat2 Cat3 other columns 8937456 0 5 10 8497534 25 3 0 8754392 4 15 7 Cat 表示该产品有多少数量属于某个
  • 如何使用 RSA256 在 PHP 中创建有效的 JWT

    我也遇到过类似的困难question https stackoverflow com questions 35314629 how to sign data in php with hmac using a pem private key
  • 如何使用 dependency.yml 引用本地模块?

    如何使用引用本地模块依赖 yml 我想我会放弃这个问题 因为它定期在论坛中显示 答案应该如下 采用以下应用程序层次结构 myplayapp myfirstmodule mysecondmodule 我正在使用运行我的应用程序播放运行 myp
  • 如何通过引用分配lua变量

    如何在Lua中通过引用将一个变量分配给另一个变量 例如 想要执行相当于 a b 的操作 其中 a 将是指向 b 的指针 背景 有一个案例 我实际上有这样的事情 local a b c d e f g lots of variables if
  • 从容器重建 docker run 命令参数

    最好的重建方法是什么docker run来自现有 docker 容器的命令参数 我可以用docker inspect并使用在那里找到的信息 还有更好的办法吗 不是很容易 但是您可以通过格式化输出来做到这一点docker inspect 对于
  • C++ list::sort 的自定义比较函数

    您好 我在编译一段简单的代码时遇到问题 我正在创建一个实现一副纸牌的类 并且我想使用 list short 方法创建一个洗牌方法 相关代码 deck h ifndef DECK H define DECK H include
  • Git:配置 difftool 和 mergetool 的模式

    在 Mercurial 中 可以为外部差异和合并工具定义一种模式 以便仅针对与指定模式匹配的文件调用它们 diff patterns ext difftool merge patterns ext mergetool 如何在 Git 中定义
  • HasDbFunction,没有映射实体类的表值函数

    到目前为止我发现的所有内容 如果您调用表值函数 则返回值必须是 IQueryable 例如 public IQueryable
  • 使用 Scapy 与 C 套接字对话

    我有一个 UDP 连接并在端口 localhost 上侦听 并且我也尝试从 localhost 发送 Scapy 数据包 由于某种原因 我的 C 代码从未真正捕获数据包 但我可以很好地看到数据包显示在 Wireshark 中 我已经有一段时