Skip to content

Protocol not available (92) - Should this work in ubuntu? #4

@markwylde

Description

@markwylde

I'm trying to use this in linux ubuntu to get the SO_ORIGINAL_DST from a tcp socket that is redirect via iptables.

Looking at some working golang code:

const SO_ORIGINAL_DST = 80

...

   addr, err :=  syscall.GetsockoptIPv6Mreq(int(clientConnFile.Fd()), syscall.IPPROTO_IP, SO_ORIGINAL_DST)
    log.Debugf("getOriginalDst(): SO_ORIGINAL_DST=%+v\n", addr)
    if err != nil {
        log.Infof("GETORIGINALDST|%v->?->FAILEDTOBEDETERMINED|ERR: getsocketopt(SO_ORIGINAL_DST) failed: %v", srcipport, err)
        return
    }

It would appear that IPPROTO_IP = 0 and SO_ORIGINAL_DST = 80.

I would have expected (although I'm sure I'm completely missing something) the following code to work:

const net = require('net');
const {getsockopt, setsockopt} = require('.');

const SOL_SOCKET = 1;

const server = net.createServer((c) => {
	console.log(getsockopt(c, SOL_SOCKET, 80))
});
server.listen(8080, () => {
  console.log('server bound');
});

But it returns:

/root/tproxy/node-sockopt/index.js:17
	return _getsockopt(fd(socket), level, flagName)
	       ^

TypeError: getsockopt failed: Protocol not available (92)
    at getsockopt (/root/tproxy/node-sockopt/index.js:17:9)
    at Socket.<anonymous> (/root/tproxy/node-sockopt/test.js:19:22)
    at Socket.onListening (dgram.js:225:10)
    at Socket.emit (events.js:315:20)
    at startListening (dgram.js:150:10)
    at dgram.js:345:7
    at processTicksAndRejections (internal/process/task_queues.js:85:21)

It looks like my combination of 1 and 80 is either incorrect, or I'm using this completely wrong.

Next I ran a couple of loops to try every possibility I could think of. But I can't see 80 working for any level + flagName combination.

	for (let x = 0; x < 100; x++ ) {
		for (let y = 0; y < 100; y++ ) {
			try {
				console.log({x,y}, getsockopt(c, x, y))
			} catch (error) {
			}
		}
	}
{ x: 0, y: 1 } 0
{ x: 0, y: 2 } 64
{ x: 0, y: 3 } 0
{ x: 0, y: 4 } 74898496
{ x: 0, y: 6 } 0
{ x: 0, y: 7 } 0
{ x: 0, y: 8 } 0
{ x: 0, y: 9 } 0
{ x: 0, y: 10 } 1
{ x: 0, y: 11 } 0
{ x: 0, y: 12 } 0
{ x: 0, y: 13 } 0
{ x: 0, y: 14 } 1500
{ x: 0, y: 15 } 0
{ x: 0, y: 18 } 0
{ x: 0, y: 19 } 0
{ x: 0, y: 20 } 0
{ x: 0, y: 21 } 0
{ x: 0, y: 22 } 0
{ x: 0, y: 23 } 0
{ x: 0, y: 24 } 0
{ x: 0, y: 25 } 0
{ x: 0, y: 32 } 0
{ x: 0, y: 33 } 64
{ x: 0, y: 34 } 1
{ x: 0, y: 49 } 0
{ x: 0, y: 50 } 0
{ x: 1, y: 1 } 0
{ x: 1, y: 2 } 1
{ x: 1, y: 3 } 1
{ x: 1, y: 4 } 0
{ x: 1, y: 5 } 0
{ x: 1, y: 6 } 0
{ x: 1, y: 7 } 130560
{ x: 1, y: 8 } 131072
{ x: 1, y: 9 } 0
{ x: 1, y: 10 } 0
{ x: 1, y: 11 } 0
{ x: 1, y: 12 } 0
{ x: 1, y: 13 } 0
{ x: 1, y: 14 } 0
{ x: 1, y: 15 } 0
{ x: 1, y: 16 } 0
{ x: 1, y: 17 } 0
{ x: 1, y: 18 } 1
{ x: 1, y: 19 } 1
{ x: 1, y: 20 } 0
{ x: 1, y: 21 } 0
{ x: 1, y: 25 } 0
{ x: 1, y: 26 } 75578616
{ x: 1, y: 28 } 1020264458
{ x: 1, y: 29 } 0
{ x: 1, y: 30 } 0
{ x: 1, y: 34 } 0
{ x: 1, y: 35 } 0
{ x: 1, y: 36 } 0
{ x: 1, y: 37 } 0
{ x: 1, y: 38 } 6
{ x: 1, y: 39 } 10
{ x: 1, y: 40 } 0
{ x: 1, y: 41 } 0
{ x: 1, y: 43 } 0
{ x: 1, y: 44 } 0
{ x: 1, y: 45 } 0
{ x: 1, y: 46 } 0
{ x: 1, y: 47 } -1
{ x: 1, y: 48 } 64
{ x: 1, y: 49 } 0
{ x: 1, y: 55 } 2304
{ x: 1, y: 56 } 0
{ x: 1, y: 60 } 0
{ x: 6, y: 1 } 0
{ x: 6, y: 2 } 1448
{ x: 6, y: 3 } 0
{ x: 6, y: 4 } 7200
{ x: 6, y: 5 } 75
{ x: 6, y: 6 } 9
{ x: 6, y: 7 } 6
{ x: 6, y: 8 } 60
{ x: 6, y: 9 } 0
{ x: 6, y: 10 } 64076
{ x: 6, y: 11 } 1
{ x: 6, y: 12 } 1
{ x: 6, y: 13 } 7496290
{ x: 6, y: 16 } 0
{ x: 6, y: 17 } 0
{ x: 6, y: 18 } 0
{ x: 6, y: 19 } 0
{ x: 6, y: 23 } 0
{ x: 6, y: 24 } -1560222177
{ x: 6, y: 25 } 0
{ x: 6, y: 26 } 0
{ x: 6, y: 27 } 0
{ x: 6, y: 28 } -1645237088
{ x: 6, y: 30 } 0
{ x: 6, y: 31 } -1645237088
{ x: 6, y: 33 } 0
{ x: 6, y: 34 } 0
{ x: 41, y: 1 } 10
{ x: 41, y: 2 } 0
{ x: 41, y: 3 } 0
{ x: 41, y: 4 } 0
{ x: 41, y: 5 } 0
{ x: 41, y: 6 } -1645237088
{ x: 41, y: 8 } 0
{ x: 41, y: 11 } 0
{ x: 41, y: 16 } 64
{ x: 41, y: 17 } 4
{ x: 41, y: 18 } 64
{ x: 41, y: 19 } 1
{ x: 41, y: 23 } 1
{ x: 41, y: 24 } 1500
{ x: 41, y: 25 } 0
{ x: 41, y: 26 } 0
{ x: 41, y: 33 } 0
{ x: 41, y: 49 } 0
{ x: 41, y: 51 } 0
{ x: 41, y: 53 } 0
{ x: 41, y: 54 } -1645237088
{ x: 41, y: 55 } -1645237088
{ x: 41, y: 56 } 0
{ x: 41, y: 57 } -1645237088
{ x: 41, y: 58 } 0
{ x: 41, y: 59 } -1645237088
{ x: 41, y: 60 } 0
{ x: 41, y: 62 } 0
{ x: 41, y: 66 } 0
{ x: 41, y: 67 } 0
{ x: 41, y: 70 } 1
{ x: 41, y: 72 } 1280
{ x: 41, y: 73 } 0
{ x: 41, y: 74 } 0
{ x: 41, y: 75 } 0
{ x: 41, y: 76 } 0
{ x: 41, y: 77 } 0
{ x: 41, y: 78 } 0

Could you please point me in the right direction?

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions