pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/55446 (scapy function send() does not work)



The following reply was made to PR pkg/55446; it has been noted by GNATS.

From: tmp%bh0.amt.ru@localhost
To: gnats-bugs%netbsd.org@localhost, gutteridge%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
        pkgsrc-bugs%netbsd.org@localhost, tmp%bh0.amt.ru@localhost
Cc: 
Subject: Re: pkg/55446 (scapy function send() does not work)
Date: Fri, 17 Jul 2020 13:07:51 +0300

 On 07/15/20 05:25, David H. Gutteridge wrote:
 > The following reply was made to PR pkg/55446; it has been noted by GNATS.
 >
 > From: "David H. Gutteridge" <david%gutteridge.ca@localhost>
 > To: gnats-bugs%netbsd.org@localhost
 > Cc: 
 > Subject: Re: pkg/55446 (scapy function send() does not work)
 > Date: Tue, 14 Jul 2020 22:22:45 -0400
 >
 >  On Fri, 2020-07-10 at 23:43 +0300, tmp%bh0.amt.ru@localhost wrote:
 >  > On 07/10/20 23:35, tmp%bh0.amt.ru@localhost wrote:
 >  > >  On 07/06/20 01:25, David H. Gutteridge wrote:
 >  > >  >  I hadn't had occasion to try interacting with a loopback device with
 >  > >  >  Scapy before, but I borrowed that example from the Scapy test suite
 >  > >  >  (where it recorded a pass for me on NetBSD 8.1 when I ran it while
 >  > >  >  doing the last package update), but, the difference is, their test
 >  > >  >  example targets the IP address "8.8.8.8".
 >  > >  
 >  > >  I tried "8.8.8.8", the result was:
 >  [...]                                
 >  > >  >>> sendp(IP(dst="8.8.8.8")/ICMP()/"test"
 >  > >  ... help
 >  > >    File "<console>", line 2
 >  > >      help
 >  > >         ^
 >  > >  SyntaxError: invalid syntax
 >  > >  >>> 
 >  > 
 >  > I'm sorry for the mistake, the right output is:
 >  > 
 >  > > > > send(IP(dst="8.8.8.8")/ICMP()/"test"
 >  > ... help
 >  >   File "<console>", line 2
 >  >     help
 >  >        ^
 >  > SyntaxError: invalid syntax
 >  > >  I realized that something went wrong.
 >  
 >  I think you're missing a closing bracket in those examples?
 
 Yes, I'm sorry, the right output is:
 
 # scapy
 INFO: Can't import matplotlib. Won't be able to plot.
 INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
 INFO: No IPv6 support in kernel
 WARNING: No route found for IPv6 destination :: (no default route?)
 INFO: Can't import python-cryptography v1.7+. Disabled WEP decryption/encryption. (Dot11)
 INFO: Can't import python-cryptography v1.7+. Disabled IPsec encryption/authentication.
 WARNING: IPython not available. Using standard Python shell instead.
 AutoCompletion, History are disabled.
                                       
                      aSPY//YASa       
              apyyyyCY//////////YCa       |
             sY//////YSpcs  scpCY//Pp     | Welcome to Scapy
  ayp ayyyyyyySCP//Pp           syY//C    | Version git-archive.dev304758016
  AYAsAYYYYYYYY///Ps              cY//S   |
          pCCCCY//p          cSSps y//Y   | https://github.com/secdev/scapy
          SPPPP///a          pP///AC//Y   |
               A//A            cyP////C   | Have fun!
               p///Ac            sC///a   |
               P////YCpc           A//A   | To craft a packet, you have to be a
        scccccp///pSP///p          p//Y   | packet, and learn how to swim in
       sY/////////y  caa           S//P   | the wires and in the waves.
        cayCyayP//Ya              pY/Ya   |        -- Jean-Claude Van Damme
         sY/PsY////YCc          aC//Yp    |
          sc  sccaCY//PCypaapyCP//YSs  
                   spCPY//////YPSps    
                        ccaacs         
                                       
 >>> send(IP(dst="8.8.8.8")/ICMP()/"test")
 ERROR: --- Error sending packets
 Traceback (most recent call last):
   File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py", line 197, in _sndrcv_snd
     self.pks.send(p)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 317, in send
     return os.write(self.outs, raw(x))
 OSError: [Errno 47] Address family not supported by protocol family
 WARNING: Mac address to reach destination not found. Using broadcast.
 WARNING: Could not get the source MAC: No MAC address found on tun4 !
 Traceback (most recent call last):
   File "<console>", line 1, in <module>
   File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py", line 319, in send
     realtime=realtime, return_packets=return_packets)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py", line 291, in __gen_send
     s.send(p)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 362, in send
     L2bpfSocket.send(self, frame)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 317, in send
     return os.write(self.outs, raw(x))
 OSError: [Errno 47] Address family not supported by protocol family
 >>> 
 
 >  Taking Scapy's ICMP test cases "Sending an ICMP message at layer 2 and
 >  layer 3" from their test/regression.uts (lines 1337-1344) and running
 >  them manually (without any prior explicit configration of any kind) on
 >  8.2_STABLE/amd64, I get something different:
 >  
 >  >>> send(IP(dst="8.8.8.8")/ICMP(), return_packets=True, realtime=True)
 >  WARNING: Mac address to reach destination not found. Using broadcast.
 >  .
 >  Sent 1 packets.
 >  <PacketList: TCP:0 UDP:0 ICMP:1 Other:0>
 
 My output is:
 
 >>> send(IP(dst="8.8.8.8")/ICMP(), return_packets=True, realtime=True)
 ERROR: --- Error sending packets
 Traceback (most recent call last):
   File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py", line 197, in _sndrcv_snd
     self.pks.send(p)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 317, in send
     return os.write(self.outs, raw(x))
 OSError: [Errno 47] Address family not supported by protocol family
 WARNING: Mac address to reach destination not found. Using broadcast.
 WARNING: Could not get the source MAC: No MAC address found on tun4 !
 Traceback (most recent call last):
   File "<console>", line 1, in <module>
   File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py", line 319, in send
     realtime=realtime, return_packets=return_packets)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py", line 291, in __gen_send
     s.send(p)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 362, in send
     L2bpfSocket.send(self, frame)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 317, in send
     return os.write(self.outs, raw(x))
 OSError: [Errno 47] Address family not supported by protocol family
 >>> 
 
 
 >  >>> sendp(Ether()/IP(dst="8.8.8.8")/ICMP(), return_packets=True,
 >  realtime=True)
 >  WARNING: Mac address to reach destination not found. Using broadcast.
 >  .
 >  Sent 1 packets.
 >  <PacketList: TCP:0 UDP:0 ICMP:1 Other:0>
 >  >>> 
 >  
 >  (In my case, I have a wired wm0 active.)
 
 My output is:
 
 >>> sendp(Ether()/IP(dst="8.8.8.8")/ICMP(), return_packets=True, realtime=True)
 ERROR: --- Error sending packets
 Traceback (most recent call last):
   File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py", line 197, in _sndrcv_snd
     self.pks.send(p)
   File "/usr/pkg/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 317, in send
     return os.write(self.outs, raw(x))
 OSError: [Errno 47] Address family not supported by protocol family
 WARNING: Mac address to reach destination not found. Using broadcast.
 WARNING: Could not get the source MAC: No MAC address found on tun4 !
 .
 Sent 1 packets.
 <PacketList: TCP:0 UDP:0 ICMP:1 Other:0>
 >>> 
 
 
 >  > >  > Anyway, you'll want to have a
 >  > >  >  look at the following link in the Scapy documentation:
 >  > >  >  
 >  > > https://scapy.readthedocs.io/en/latest/troubleshooting.html#i-can-t-ping-127-0-0-1-scapy-does-not-work-with-127-0-0-1-or-on-the-loopback-interface
 >  > >  
 >  > >  I tried the above, the result was:
 >  > >  
 >  > >  # scapy
 >  > >  INFO: Can't import matplotlib. Won't be able to plot.
 >  > >  INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
 >  > >  INFO: No IPv6 support in kernel
 >  > >  WARNING: No route found for IPv6 destination :: (no default route?)
 >  > >  INFO: Can't import python-cryptography v1.7+. Disabled WEP
 >  > > decryption/encryption. (Dot11)
 >  > >  INFO: Can't import python-cryptography v1.7+. Disabled IPsec
 >  > > encryption/authentication.
 >  > >  WARNING: IPython not available. Using standard Python shell
 >  > > instead.
 >  > >  AutoCompletion, History are disabled.
 >  > >                                        
 >  > >                       aSPY//YASa       
 >  > >               apyyyyCY//////////YCa       |
 >  > >              sY//////YSpcs  scpCY//Pp     | Welcome to Scapy
 >  > >   ayp ayyyyyyySCP//Pp           syY//C    | Version git-
 >  > > archive.dev304758016
 >  > >   AYAsAYYYYYYYY///Ps              cY//S   |
 >  > >           pCCCCY//p          cSSps y//Y   | 
 >  > > https://github.com/secdev/scapy
 >  > >           SPPPP///a          pP///AC//Y   |
 >  > >                A//A            cyP////C   | Have fun!
 >  > >                p///Ac            sC///a   |
 >  > >                P////YCpc           A//A   | Wanna support scapy?
 >  > > Rate it on
 >  > >         scccccp///pSP///p          p//Y   | sectools!
 >  > >        sY/////////y  caa           S//P   | 
 >  > > http://sectools.org/tool/scapy/
 >  > >         cayCyayP//Ya              pY/Ya   |             -- Satoshi
 >  > > Nakamoto
 >  > >          sY/PsY////YCc          aC//Yp    |
 >  > >           sc  sccaCY//PCypaapyCP//YSs  
 >  > >                    spCPY//////YPSps    
 >  > >                         ccaacs         
 >  > >                                        
 >  > >  >>> conf.L3socket
 >  > >  <L3bpfSocket: read/write packets using BPF>
 >  > >  >>> conf.L3socket=L3RawSocket
 >  > >  >>> conf.L3socket
 >  > >  <L3RawSocket: Layer 3 using Raw sockets (PF_INET/SOCK_RAW)>
 >  > >  >>> p=IP(dst="127.0.0.1")/ICMP()/"test"
 >  > >  >>> p.show2()
 >  > >  ###[ IP ]### 
 >  > >    version= 4
 >  > >    ihl= 5
 >  > >    tos= 0x0
 >  > >    len= 32
 >  > >    id= 1
 >  > >    flags= 
 >  > >    frag= 0
 >  > >    ttl= 64
 >  > >    proto= icmp
 >  > >    chksum= 0x7cda
 >  > >    src= 127.0.0.1
 >  > >    dst= 127.0.0.1
 >  > >    \options\
 >  > >  ###[ ICMP ]### 
 >  > >       type= echo-request
 >  > >       code= 0
 >  > >       chksum= 0x1026
 >  > >       id= 0x0
 >  > >       seq= 0x0
 >  > >  ###[ Raw ]### 
 >  > >          load= 'test'
 >  > >  
 >  > >  >>> send(p)
 >  > >  Traceback (most recent call last):
 >  > >    File "<console>", line 1, in <module>
 >  > >    File "/usr/pkg/lib/python3.7/site-packages/scapy/sendrecv.py",
 >  > > line 316, in send
 >  > >      socket = socket or conf.L3socket(*args, **kargs)
 >  > >    File "/usr/pkg/lib/python3.7/site-packages/scapy/supersocket.py", 
 >  > > line 150, in __init__
 >  > >      self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW,
 >  > > socket.htons(type))  # noqa: E501
 >  > >  AttributeError: module 'socket' has no attribute 'AF_PACKET'
 >  > >  
 >  > >  >  Separately...
 >  > >  >  
 >  > >  >  >I'd like to clarify the environment of the bug:
 >  > >  >  >(1) I have no active Ethernet or SLIP interfaces;
 >  > >  >  >(2) I have active Wi-Fi and tun interfaces.
 >  > >  >  >
 >  > >  >  >According to the "man 4 bpf": "A packet can be sent out on the network
 >  > >  >  >by writing to a bpf file descriptor. The writes are unbuffered, meaning
 >  > >  >  >only one packet can be processed per write. Currently, only writes to
 >  > >  >  >Ethernets and SLIP links are supported."
 >  > >  >  
 >  > >  >  I think there may be a documentation issue or two there. That last
 >  > >  >  statement is perhaps outdated (I haven't checked in detail), and refers
 >  > >  >  to writes to a link layer which Wi-Fi devices also use. (Note your
 >  > >  >  tcpdump output states your iwi0 device's "link-type" is "Ethernet".)
 >  > >  >  
 >  > >  >  From looking at Scapy commits, it seems NetBSD 8 was the release they
 >  > >  >  developed against. So generally we should expect at minimum it's more
 >  > >  >  likely to work on 8.x than newer releases.
 >  > >  >  
 >  > >  >  I don't use Scapy much; I was using bits of it before for specific
 >  > >  >  purposes, but not most of its functionality, so issues with it haven't
 >  > >  >  been a priority for me to chase. I think in this case some of this
 >  > >  >  issue is better directed to the Scapy project. (I will look into the
 >  > >  >  bpf documentation aspect.)
 >  > >  >  
 >  > >  >  Dave
 >  > >  
 >  > >  OK. I'll write to the Scapy project.
 >  
 >  Once submitted, please add the Scapy issue number to this PR. We'll keep
 >  this open, as it may require something from our end. (Separate from any
 >  NetBSD documentation that needs to be adjusted still.)
 >  
 >  Dave
 
 OK, but I have not received any answer from the Scapy Project yet.
 
 
 --
 Alexei
 
 


Home | Main Index | Thread Index | Old Index