13

I'm using CentOS 6.7 (Final) system, and when I try to run nc in listening mode it prints the following:

nc -l 1234
nc: Protocol not available

The port is not bound. I tried other port numbers too. This bug seem to have been reported already: https://access.redhat.com/solutions/1753753. Unfortunately it is not very detailed.

Package information:

Name        : nc
Arch        : x86_64
Version     : 1.84
Release     : 24.el6

Is there something else I need to try out?

Eddie C.
  • 549
  • 1
  • 3
  • 12
Ilya I
  • 288

5 Answers5

18

I ran into the same issue. You can solve it this way:

# Removes the old package
yum erase nc

Manually downloads the working package from the Official Repository

wget http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm

Installs the package

rpm -iUv nc-1.84-22.el6.x86_64.rpm

Please note that the package is for x86_64 (64-bit). If you need i386 (32-bit), the correct one is:

wget http://vault.centos.org/6.6/os/i386/Packages/nc-1.84-22.el6.i686.rpm
Eddie C.
  • 549
  • 1
  • 3
  • 12
11

This particular version of netcat has a bug. Until there's a fix out for it, the only thing you can do is to downgrade to a previous version - sudo yum remove nc-1.84-24.el6.x86_64; sudo yum install nc-1.84-22.el6.x86_64 should do the trick.

Jenny D
  • 28,400
  • 21
  • 80
  • 117
4

Replying the question:

  1. YES, downgrade is needed so that nc can listen. and as for the other comments:

a) -p is not supposed to be used when in listening mode. from nc manpage:

-l Used to specify that nc should listen for an incoming connection rather than initiate a connection to a remote host. It is an error to use this option in conjunction with the -p, -s, or -z options.

b) downgrade can be done in one step, yum downgrade command works with the url to the package:

$ rpm -q nc
nc-1.84-24.el6.x86_64
$ nc -l 12345 #Although the syntax is correct, the command fails
nc: Protocol not available
$ nc -l -p 12345 #attempt to run with incorrect syntax
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
          [-x proxy_address[:port]] [hostname] [port[s]]
$ sudo yum downgrade http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm  #shortcut to downgrade
...
Setting up Downgrade Process
nc-1.84-22.el6.x86_64.rpm                                                              |  57 kB     00:00
Examining /var/tmp/yum-root-Iq4yc7/nc-1.84-22.el6.x86_64.rpm: nc-1.84-22.el6.x86_64
Resolving Dependencies
--> Running transaction check
---> Package nc.x86_64 0:1.84-22.el6 will be a downgrade
---> Package nc.x86_64 0:1.84-24.el6 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================
 Package          Arch                 Version                     Repository                            Size
==============================================================================================================
Downgrading:
 nc               x86_64               1.84-22.el6                 /nc-1.84-22.el6.x86_64               109 k

Transaction Summary
==============================================================================================================
Downgrade     1 Package(s)

Total size: 109 k
Is this ok [y/N]: y
...
Removed:
  nc.x86_64 0:1.84-24.el6

Installed:
  nc.x86_64 0:1.84-22.el6

Complete!
$ nc -l -p 12345 #attempt to run with incorrect syntax
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
          [-x proxy_address[:port]] [hostname] [port[s]]
$ nc -l 12345 # try to listen again
^C
$#nc successully opens a socket on 12345. had to stop it with ctrl+C
RSH
  • 141
1
# nc -l -p 1234

You can listen on that port by explicitely using -p flag:

-p source_port
         Specifies the source port nc should use, subject to privilege restrictions and availability.

The problem was along the lines of nc treating 1234 as the destination port (despite being run in listening mode), and trying to listen on port 0 (which produced that weird message). Explicitely passing -p works around it.

Ángel
  • 972
-2

install nmap:

yum install nmap

try:

ncat -l 1234