More then 32 bfp devices on Freebsd 5.4-RELEASE-p7

Yar Tikhiy yar at comp.chem.msu.su
Mon Oct 17 22:21:25 PDT 2005


On Mon, Oct 17, 2005 at 02:11:17PM +0100, Peter Wood wrote:
> Good Afternoon,
> 
> I'm now working at a large UK university in their network support 
> department, as such one of my duties is to monitor the residences 
> network. To this end I have a cloned nic for every vlan that we have on 
> resnet. It roughly comes to over 50 vlans, and FreeBSD its self copes 
> very nicely.
> 
> However I've run into a small problem when using nmap (and a tiny one in 
> Ethereal). Unless you specify the source address and source interface 
> for scans nmap will open every network device with bpf. The problem 
> comes when it hits the 33rd interface to open, nmap exits.
> 
> [eclair:~]# nmap -P0 -p 1-65535 -sS 10.34.96.168
> Starting nmap 3.93 ( http://www.insecure.org/nmap/ ) at 2005-10-17 14:03 BST
> getinterfaces: Failed to open ethernet interface (resnet737)
> QUITTING!
> 
> If I truss I get the following:
> 
> open("/dev/bpf29",0x1,01002230274)               ERR#16 'Device busy'
> open("/dev/bpf30",0x1,01002230274)               ERR#16 'Device busy'
> open("/dev/bpf31",0x1,01002230274)               ERR#16 'Device busy'
> write(2,0xbfbfab40,60)                               = 60 (0x3c)
> getinterfaces: Failed to open ethernet interface (resnet737)
> 
> So the question is, how can I allow more then 32 bpf devices, in the old 
> 4.X series I'd have just tagged a number on the end of the kernel line.

This is an obvious regression in nmap 3.93, which wasn't there before.
Here's the relevant part of eth-bsd.c found in nmap-3.93/libdnet-stripped/src:

                for (i = 0; i < 32; i++) {
                        snprintf(file, sizeof(file), "/dev/bpf%d", i);
                        e->fd = open(file, O_WRONLY);
                        if (e->fd != -1 || errno != EBUSY)
                                break;
                }

-- 
Yar


More information about the freebsd-net mailing list