簡體   English   中英

python socket.connect在虛擬IP上似乎不起作用

[英]python socket.connect does not seem to work on a virtual IP

我已經通過以下方式設置了一些虛擬IP:

~# ip link add link eth0 name eth0.1 address 11:22:33:44:55:66 type macvlan
~# ifconfig eth0.1 10.10.0.0/24

我正在使用以下代碼從中進行連接:

sTCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sTCP.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, IFACE)
print "PORT s_TCP:" + str(HOST) +":" +str(TCP_PORT)
sTCP.connect((HOST, TCP_PORT))
print "Connected"

如果IFACE為eth0,則此方法工作正常,但它不會從eth0.1越過sTCP.connect,並且在eth0.2上的bindtodevice失敗(如預期的那樣)。

為什么eth0.1不起作用? 這是python問題,還是linux網絡實現中的某些問題?

我只是在我的Fedora 13系統上進行了嘗試,但它確實有效。 我確實需要進行一些修改才能使其在我的系統上運行,希望這會給您一些提示。 使用的代碼:

### in shell
# Used 00 for first MAC octet to avoid issues with multicast addressing
ip link add link eth0 name eth0.1 address 00:22:33:44:55:66 type macvlan
ifconfig eth0.1 10.1.23.6/25

# python
import socket
HOST = "10.1.23.30"
TCP_PORT = 80
IFACE = "eth0.1"
sTCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# switched to socket.SO_BINDTODEVICE since I'm not sure what "IN" referred to
# EDIT: figured out there's another module called IN, but the value is the same (25)
sTCP.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, IFACE)
print "PORT s_TCP:" + str(HOST) +":" +str(TCP_PORT)
sTCP.connect((HOST, TCP_PORT))
print "Connected"

我使用tcpdump向我自己證明了數據包是從eth0.1中傳出的。 也許您遇到了VLAN問題? 在客戶端和服務器上運行數據包捕獲,以查看網絡上實際發生的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM