使用Scapy用Python编写的TCP端口扫描程序不会产生任何响应

时间:2014-06-28 23:36:35

标签: python python-2.7 tcp scapy port-scanning

我正在尝试制作一个TCP端口扫描程序,但我坚持一个非常简单的例子,我在网上找到了一个更高级的例子。

我没有收到任何错误。

我期待代码向我展示自我在Linux机器上启动Apache服务器以来端口80已打开。

以下是代码:

#!/usr/bin/python

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *

ip = "127.0.0.1"
port = 80

response = sr1(IP(dst=ip)/TCP(dport=port, flags="S"),verbose=False, timeout=0.2)

if response :
    if response[TCP].flags == 18 :    
        print "Port open"

警告我(但不再显示):

  

警告:找不到IPv6目的地的路由::(没有默认路由?)

我读到包括以下这两行有助于解决错误:

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

Nmap扫描:

STATE SERVICE
80/tcp   open  http

输出是...... 什么都没有。

我尝试了几个方法,例如将端口更改为不同的其他端口,有些是我打开的,有些是我没有打开的。

关于我做错了什么的想法?

1 个答案:

答案 0 :(得分:3)

scapy docs提到环回地址是一种特殊情况

  

loopback接口是一个非常特殊的接口。包走了   通过它没有真正组装和拆解。内核   在数据包仍然存储时将数据包路由到目的地   内部结构。你用tcpdump -i lo看到的只是假的   让你觉得一切正常。内核不知道是什么   Scapy正在背后做,所以你在环回上看到了什么   界面也是假的。除了这个,不是来自当地   结构体。因此内核永远不会收到它。

     

为了与本地应用程序对话,您需要构建自己的应用程序   数据包一层,使用PF_INET / SOCK_RAW套接字代替   PF_PACKET / SOCK_RAW(或其在Linux其他系统上的等价物):

>>> conf.L3socket
<class __main__.L3PacketSocket at 0xb7bdf5fc>
>>> conf.L3socket=L3RawSocket
>>> sr1(IP(dst="127.0.0.1")/ICMP())
<IP  version=4L ihl=5L tos=0x0 len=28 id=40953 flags= frag=0L ttl=64 proto=ICMP chksum=0xdce5 src=127.0.0.1 dst=127.0.0.1 options=''
     

| \&GT;

但是,在我的OS-X机器上测试它会导致以下错误:

>>> conf.L3socket=L3RawSocket
>>> sr1(IP(dst="127.0.0.1")/ICMP())
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scapy/sendrecv.py", line 334, in sr1
    s=conf.L3socket(filter=filter, nofilter=nofilter, iface=iface)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scapy/supersocket.py", line 64, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
AttributeError: 'module' object has no attribute 'AF_PACKET'

所以你的里程可能会有所不同

修改

显然,这是BSD系统(包括OS-X)中scapy的一个已知错误:http://bb.secdev.org/scapy/issue/174/sniffing-loopback-in-mac-os-x-darwin