代码-linux的xterm开启的终端里使用原始套接字发送数据包出错,求助

问题描述

linux的xterm开启的终端里使用原始套接字发送数据包出错,求助

xterm下原始套接字可以接收数据包,但是发送数据包时出错,怎么解决?
错误是【error 101】network is unreachable.
代码如下:
proto = socket.getprotobyname('tcp') # only tcp
sock = socket.socket( socket.AF_INET, socket.SOCK_RAW, proto )
packet_base = sock.recvfrom(1024)[0]
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.sendto(packet_base, ('123.123.123.123' , 12312))

解决方案

从错误信息看,似乎是目标机器网络不通。
看iptables有没有阻止这个端口。

时间: 2025-01-09 15:46:55

代码-linux的xterm开启的终端里使用原始套接字发送数据包出错,求助的相关文章

linux下如何使用正则表达式regex库对通过libpcap在线抓的数据包进行筛选?

问题描述 linux下如何使用正则表达式regex库对通过libpcap在线抓的数据包进行筛选? linux下有一个用c写的通过libpcap抓取数据包的程序,如何通过正则表达式库regex对数据包进行筛选?有大神的话请贴一部分代码什么的,,, 解决方案 libpcap程序里,主体通过pcap_loop或者pcap_dispatch进行循环,需要提供报文的回调函数 在回调函数里面,对报文进行解析,逐层剥离协议头(ip->tcp->7层) 根据需要进行7层解析(例如解析http字段,可选) 对解

在linux下,python怎么才能抓到网卡上的所有TCP数据包?

问题描述 在linux下,python怎么才能抓到网卡上的所有TCP数据包? 网卡已经设置为混杂模式,能够收到mac不是本机mac的数据包,但是程序只能收到和本机ip一样的数据包,不能收到和本机ip不一样的数据包,求助.代码如下: sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) packet_base = sock.recvfrom(1024)[0] print "receive a packet

捕获-Linux 原始套接字发包问题

问题描述 Linux 原始套接字发包问题 用原始套接字 实现了 抓包 协议分析.举个例子现在想通过判断TCP 的数据部分 判断是否含有Host: www.baidu.com之类的 然后返回一个302重定向包 将其请求重定向到另外的一个URL上.但是 发送的包发送不出去 wireshark捕获到 很郁闷. 解决方案 用libpcap等开发包来做呢,提供了现成的 解决方案二: libpcap+libnet已经实现了,但是原始套接字的 还没搞顺溜....

多队列网卡简介以及Linux通过网卡发送数据包源码解读

首先我们看一下一个主流多队列网卡(E1000)跟多核CPU之间的关系图: 非多队列: linux的网卡由结构体net_device表示,一个该结构体对应一个可以调度的数据包发送队列. 数据包的实体在内核中以结构体sk_buff(skb),形如: 多队列: 一个网卡可以拥有多个队列 接下来,看看TX引擎是如何工作的(注:对于发送和接收数据包有两个名词,分别应对TX,RX) 解释: 函数-dev_queue_xmit():入队一个buffer以传输到网络驱动设备. 配合该函数的源码来解释上图的传输过

Python里disconnect UDP套接字的方法_python

UDP 套接字是可以使用 connect 系统调用连接到指定的地址的.从此以后,这个套接字只会接收来自这个地址的数据,而且可以使用 send 系统调用直接发数据而不用指定地址.可以再次调用 connect 来连接到别的地方.但是在 Python 里,一旦调用 connect 之后,就再也回不到最初的能够接收从任意地址来的数据的状态了! 这是 Python 的 API 限制,没办法给 connect 方法传递到 AF_UNSPEC 地址簇(在 C 代码里写死了的).C 里边就可以做到的(代码来自这

《Linux防火墙(第4版)》——2.5 过滤传出数据包

2.5 过滤传出数据包 如果您的环境代表了一个可信赖的环境,那么过滤传出数据包可能看上去并不像过滤传入数据包那样重要.您的系统不会对无法穿过防火墙的消息进行响应.住宅站点通常采用这种方式.然而,哪怕是对住宅站点来说,对称的过滤也很重要,尤其是当防火墙保护着运行微软公司Windows系统的计算机.对于商用站点来说,传出过滤的重要性是毫无争议的. 如果您的防火墙保护着由微软公司Windows系统构成的局域网,那么控制传出流量将变得更加重要.被盗用的Windows计算机已在历史上(并将继续)被用于协助

linux tcp socket-socket编程可以使用同一个套接字发送和接受吗

问题描述 socket编程可以使用同一个套接字发送和接受吗 RT,我先bind了一个sockfd,用它send了部分数据给服务器,我想接受服务器的反馈信息,于是想用listen来监听服务器发过来的数据,但是好像不行啊,在listen的时候出错了...一定要close掉之后再建立一个socket吗? 解决方案 服务器才是listen,你想接收服务器的反馈信息,人家直接通过这个链接给你就行了.咱们的好多书都是瞎讲,或者是不讲.

《Linux防火墙(第4版)》——2.3 对一个数据包的驳回(Rejecting)VS拒绝(Denying)

2.3 对一个数据包的驳回(Rejecting)VS拒绝(Denying) 在iptables和nftables中的Netfilter防火墙机制给予您驳回或丢弃数据包的选项.那么,二者有何不同?如图2.5所示,当一个数据包被驳回(reject)时,该数据包被丢弃,同时一个ICMP错误消息将被返回到发送方.当一个数据包被丢弃时,它仅仅是被简单地丢弃而已,不会向发送者进行通知. 静静地丢掉数据包通常是更好的选择,共有三个原因.第一,发送一个错误回应会增加网络流量.大多数被丢弃的数据包被丢弃是因为它们

windows和linux套接字中的select机制浅析

先来谈谈为什么会出现select函数,也就是select是解决什么问题的? 平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待,这样实时性就不是太好. 这个问题的几个解决方法:1. 使用ioctlsocket函数,将recv函数设置成非阻塞的,这样不管套接字上有没有数据都会立刻返回,可以重复调用recv函数,这种方式叫做轮询(polling),但是这样效率很是问题,因为,大多数时间实际上是无数据可读的,花费时间不断反复执行