【问题标题】:Connecting to a TCP port using Scapy使用 Scapy 连接到 TCP 端口
【发布时间】:2018-03-13 09:27:13
【问题描述】:

我一直在玩 scapy,我有一个小问题...... 假设我在服务器上打开了一个套接字,例如在 IP 地址 1.2.3.4 的端口 80,并说它正在侦听和记录任何连接。 现在,我想使用 scapy 从我的客户端(比如 2.3.4.5)连接到这个端口,所以我必须启动一个三向握手,我一直在尝试使用以下代码执行:

ip=IP(src="2.3.4.5", dst="1.2.3.4")
TCP_SYN=TCP(sport=1500, dport=80, flags="S", seq=100)
TCP_SYNACK=sr1(ip/TCP_SYN)

my_ack = TCP_SYNACK.seq + 1
TCP_ACK=TCP(sport=1500, dport=80, flags="A", seq=101, ack=my_ack)
send(TCP_ACK/ip)

my_payload="space for rent!"
TCP_PUSH=TCP(sport=1500, dport=80, flags="PA", seq=102, ack=my_ack)
sendp(ip/TCP_PUSH/my_payload)

但是我从来没有得到服务器的响应;控制台只打印“完成发送 1 个数据包”。然后打印点流。有谁知道我做错了什么?

【问题讨论】:

    标签: python python-3.x networking tcp scapy


    【解决方案1】:

    1) 看起来“send”和“sendp”收不到答案。

    2) 所以你可以试试这个:

    ip=IP(src="2.3.4.5", dst="1.2.3.4")
    TCP_SYN=TCP(sport=1500, dport=80, flags="S", seq=100)
    TCP_SYNACK=sr1(ip/TCP_SYN)
    
    print(TCP_SYNACK)
    print(TCP_SYNACK.show())
    

    其中一张应该会显示来自服务器的响应。

    3) 你可以尝试把你的“send”和“sendp”改成“sr”或者“sr1”,然后打印结果:

    my_ack = TCP_SYNACK.seq + 1
    TCP_ACK=TCP(sport=1500, dport=80, flags="A", seq=101, ack=my_ack)
    answ, un_answ = sr(TCP_ACK/ip)
    
    print(answ)
    print(answ.summary())
    print(answ.show())
    

    我不确定这是否可行,以前从未使用过 scapy,所以请等待您的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-16
      • 2016-06-20
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2012-11-13
      • 2013-05-17
      • 1970-01-01
      相关资源
      最近更新 更多