首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python3套接字只接收来自netcat的数据

python3套接字只接收来自netcat的数据
EN

Stack Overflow用户
提问于 2017-07-18 14:30:59
回答 1查看 251关注 0票数 1

我试图为rtp序列跟踪创建一个简单的python程序,但遇到了一个奇怪的问题。我可以在tcpdump上看到rtp数据,但是当我在那里运行脚本recvfrom时,我确认端口是用netstat打开的,如果我使用netcat发送数据,脚本就会接收数据。

代码语言:javascript
运行
复制
#!/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上却不起作用。

以下是我的rtp流的tcpdump输出

10:26:57.486256 IP 209.87.232.169.57346 > 192.168.1.100.6022: UDP,长度1328 0x0000: 4500 054c 66e6 0000 3d11 95 10 d157 e8a9 E..Lf...=....W. 0x0010: c0a8 0164 e002 1786 0538 9797 8021 eddc ...d.....8.0x0020: 6512 e48b e7a0 747 d 4700 6513 e.t}G.E.

这是来自netcat的tcpdump的输出

10:26:51.709234 IP 192.168.2.149.52305 > 192.168.2.241.6022: UDP,长度3 0x0000: 4500 001f 7d3c 4000 4011 36.6 c0a8 0295 E.}<@.0x0010: c0a8 02f1 cc51 1786 000b 22c0 6869 0a00 .....Q.“.hi. 0x0020: 0000 0000 0000 .

谢谢你找我

EN

Stack Overflow用户

回答已采纳

发布于 2017-07-18 18:22:06

好吧,伙计们,如果其他人把头撞到墙上,我的解决办法就交给我了。

所以问题是,net.ipv4.conf.all.rp_filter,net.ipv4.conf.eth1.rp_filter,net.ipv4.conf.eth2.rp_filter都启用了,在这里找到了https://serverfault.com/a/216568的答案。

基本上,这些信任所做的是过滤掉任何不是来自本地lan的数据,以防止欺骗,我将它们全部设置为0,脚本就会启动。

谢谢你的评论和花时间看。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45169747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档