我正在嘗試創建一個簡單的蟒蛇程序rtp序列跟蹤,但遇到了一個奇怪的問題。我可以在tcpdump上看到rtp數據,但是當我運行我的腳本recvfrom時,它只是坐在那裏,我確認端口是用netstat打開的,如果我使用netcat發送數據,腳本確實會接收數據。python3套接字recvfrom只接收來自netcat的數據
#!/usr/bin/python3
import socket, threading, time
import datetime, sys
def main():
"""
MAIN
"""
#udp = rxUdp()
#udp.startUDPRx()
udp_ip = '192.168.1.100'
udp_port = 6022
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #IP/UDP
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.bind(('', udp_port))
#sock.bind(('eth1', 0))
expected_rtp_seq = None
print('Running')
ts_file = open('test.ts', 'wb')
#while True:
for i in range (1, 1000):
data = b''
data, addr = sock.recvfrom(1500) #buffer size
rtp_sequence_no = data[2:4]
rtp_sequence_no = int.from_bytes(rtp_sequence_no, byteorder='big')
rtp_len = data[19:20]
mpegts_data = data[12:len(data)]
print(rtp_sequence_no)
print('.', end='')
sys.stdout.flush()
ts_file.write(mpegts_data)
print(len(data))
if expected_rtp_seq == None:
expected_rtp_seq = rtp_sequence_no
if expected_rtp_seq != rtp_sequence_no:
print('\n%s: Sequence Mismatch. Expected %d, got %d' %
(datetime.datetime.now(), expected_rtp_seq, rtp_sequence_no))
expected_rtp_seq = rtp_sequence_no
if expected_rtp_seq == 65535:
expected_rtp_seq = 0
else:
expected_rtp_seq += 1
ts_file.close()
if __name__ == '__main__':
main()
我應該提到這段代碼似乎在Windows 7上工作,但不在Ubuntu上。
這裏是tcpdump的的輸出,用於我的RTP流
10:26:57.486256 IP 209.87.232.169.57346> 192.168.1.100.6022:UDP,長度1328 0×0000:4500 054C 0000 66e6 3D11 95ad d157 e8a9 E..Lf ... = ... W .. 0x0010:c0a8 0164 e002 1786 0538 9797 8021 eddc ... d ..... 8 ...!.. 0x0020:6512 e48b e7a0 747d 4700 6513 e ..... t} Ge
這裏是tcpdump的從netcat的
10的輸出:26:51.709234 IP 192.168.2.149.52305> 192.168.2.241.6022:UDP,長度3 0×0000:4500 001F 4000 7d3c 4011 36bb c0a8 0295 E ...} < @。@ ..... 0x0010:c0a8 02f1 cc51 1786 000b 22c0 6869 0a00 ..... Q ....「嗨.. 0x0020:0000 0000 0000 0000 0000 0000 ............
感謝您的期待
那麼,哪個IP是你的程序運行在'192.168.2.241'或'192.168.1.100'上? –
你的程序適合我。你確定你的IP地址是正確的,並且你沒有試圖在你的Windows計算機的IP地址在Ubuntu上運行?嘗試用0.0.0.0替換IP地址,以便它監聽所有接口。 – Hannu
如果你看看我的.bind,你可以看到我拿出udp_ip,所以它會綁定到所有接口,我的ubuntu機器有192.168.1.100 eth1和192.168.2.241 eth2。它會在任一界面上接受來自netcat的消息,但它只是看不到rtp數據。 – Ryan