- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 python 中使用原始 IPv6 套接字时遇到一些问题。我通过以下方式连接:
if self._socket != None:
# Close out old socket first
self._socket.close()
self._socket = socket.socket(socket.AF_INET6, socket.SOCK_RAW)
self._socket.bind((self._interface,0))
self._socket.sendall(data)
其中 self._interface 是我的本地地址;特别是“fe80::fa1e:dfff:fed6:221d”。尝试此操作时,我收到以下错误:
File "raw.py", line 164, in connect
self._socket.bind((self._interface,0))
File "<string>", line 1, in bind
socket.error: [Errno 49] Can't assign requested address
如果我使用我的 ipv6 本地主机地址作为 self._interface ("::1"),我实际上可以绑定(bind)该地址,但无法发送任何内容:
self._socket.sendall(data)
File "<string>", line 1, in sendall
socket.error: [Errno 39] Destination address required
为什么原始套接字需要目标地址?有没有人在 python 中使用过原始 IPv6 套接字,并且可以帮助我理解为什么会发生这种情况?
最佳答案
虽然这是一个老问题,但我想添加一个有效的答案,并帮助任何后来偶然发现它的人。
关键问题是:
原始套接字未绑定(bind)并连接到其他套接字。另外,sendto 是要使用的正确 API。
此外,ipv6 数据包需要 4 个元组结构作为目标地址,而不是 ipv4 需要两个元组结构。
最后,堆栈(至少在 Linux mint 15 上)对 ipv6 数据包更加严格。如果您尝试发送一个空的 icmpv4 echo 请求,Python 会允许它并在线上发送一个无意义的数据包。与 ipv6 的情况一样,当您尝试发送空数据包时,它只会给出“无效参数”错误。因此,如果是 ipv6,则还需要有效的请求。以下示例针对 ipv6 执行所有操作,并向环回地址发送有效的 ping echo 请求。
import socket
def main(dest_name):
addrs = socket.getaddrinfo(dest_name, 0, socket.AF_INET6, 0, socket.SOL_IP)
print addrs
dest = addrs[0]
# A minimal ICMP6-echo message (thanks to abarnert)
data = '\x80\0\0\0\0\0\0\0'
icmp = socket.getprotobyname('ipv6-icmp')
#print icmp
send_socket = socket.socket(socket.AF_INET6, socket.SOCK_RAW, icmp)
print "sent to " + str(dest[4])
send_socket.sendto(data, dest[4])
send_socket.close()
if __name__ == '__main__':
main('::1')
关于Python 原始 IPv6 套接字错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973142/
目前部署在 Kubernetes 中的服务,通过 Calico BGP 将 Service 与集群外网络打通,并在外部的 nginx 中配置 Service 地址对外进行服务暴露。经过一段时间的观察
如发现here , 有一种新的 kube 服务是 IPVS 并且有很多负载均衡算法。 唯一的问题是我没有找到指定这些算法的位置。 我的理解: rr:循环法->循环调用后端pod lc:最少连接-> 将
我想尝试这种新的代理模式以及它为我们的一些应用程序提供的各种调度程序。到目前为止,我一直无法找到更改默认模式的方法 iptables至 ipvs在 GKE 节点上。 每个人都说通过--proxy-mo
我想在现有集群中为 IPVS 启用 Kube-proxy 模式。目前,它在 IPtables 上运行。如何在不影响现有工作负载的情况下将其更改为 IPVS? 我已经安装了所有必需的模块来启用它。另外,
我正在开发的应用程序作为 Kubernetes 集群中的部署运行。为此部署创建的 Pod 分布在集群中的各个节点上。我们的应用程序一次只能处理一个 TCP 连接,并且会拒绝进一步的连接。目前,我们使用
我是一名优秀的程序员,十分优秀!