Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Authentication sometimes fails #9

Open
Taraman17 opened this issue Nov 2, 2020 · 13 comments
Open

Authentication sometimes fails #9

Taraman17 opened this issue Nov 2, 2020 · 13 comments

Comments

@Taraman17
Copy link
Contributor

I have a problem, that sometimes (meanwhile close to 50%) the authentication fails. No answer is sent from the module.

Logging whats happening, I found that sometimes the 2 Authentication packets are sent by the server (or at least received by rcon-srcds) as 1:

writing packet
packet written.
received packet:
<Buffer 0a 00 00 00 99 09 00 00 00 00 00 00 00 00 0a 00 00 00 99 09 00 00 02 00 00 00 00 00>
decoded packet:
{
  size: 10,
  id: 2457,
  type: 0,
  body: '\u0000\u0000\n\u0000\u0000\u0000\u0019\t\u0000\u0000\u0002\u0000\u0000\u0000'
}

a correct set of packets looks like this:

writing packet
packet written.
received packet:
<Buffer 0a 00 00 00 99 09 00 00 00 00 00 00 00 00>
decoded packet:
{ size: 10, id: 2457, type: 0, body: '' }
received packet
<Buffer 0a 00 00 00 99 09 00 00 02 00 00 00 00 00>
decoded packet:
{ size: 10, id: 2457, type: 2, body: '' }
Auth response is success
@mandelmonkey
Copy link

I some times get no response as well, did you find a fix for this?

@Taraman17
Copy link
Contributor Author

I can't see why the server is behaving this way.
I didn't really look into this, I was hoping, @EnriqCG would have a look.

@EnriqCG
Copy link
Owner

EnriqCG commented Nov 6, 2020

So I have no idea why this is happening and I still don't know if this is a library issue or an issue with the CS:GO gameserver itself. I've noticed the issue started happening somewhere around May 2020.

The following code is a temporary solution I'm not proud of, but it's what we've been running at Generation Esports for a couple months without the auth issue happening again.

if (type === protocol.SERVERDATA_AUTH && decodedPacket.type !== protocol.SERVERDATA_AUTH_RESPONSE) {
    /**
     * Since May 2020 reports have arisen about CSGO servers sending 0x00 but not confirming auth
     * with 0x02. This is a temporary solution that solves the problem.
     */
    if (decodedPacket.body !== '') {
        if (decodedPacket.body === '\u0000\u0000\n\u0000\u0000\u0000<\n\u0000\u0000\u0002\u0000\u0000\u0000') {
            resolve(true)
        } else {
            reject(Error('Unable to authenticate'))
        }
        this.connection.removeListener('data', onData)
    }
    return
}

As I see more people having the issue now I am going to take the time to audit the library and come up with a better solution than the one above.

@Taraman17
Copy link
Contributor Author

Thx Enrique

@mandelmonkey
Copy link

mandelmonkey commented Nov 7, 2020 via email

@mandelmonkey
Copy link

@EnriqCG may I ask where you place this quick fix? and does it just make the problem go away for now or do I still need to handle something?

(sorry im new to rcon and udp)

on another note ive started to run a linux server instead of windows and the issue hasnt happened yet

@EnriqCG
Copy link
Owner

EnriqCG commented Nov 9, 2020

You should replace this if statement with the above mentioned snippet. That should handle the authentication error and there is no extra requirement.

I can confirm the issue happens on Linux too. I rarely run a CS:GO server in Windows anymore and I see this issue a lot. So it is not an OS-dependent thing.

@Taraman17
Copy link
Contributor Author

Taraman17 commented Nov 9, 2020

if (type === protocol.SERVERDATA_AUTH && decodedPacket.type !== protocol.SERVERDATA_AUTH_RESPONSE) {

Protocol.SERVER... has to be with a capital P.

EDIT:
At least in the current version. In the Typescript version from the pull-request it's correct as is.

@mandelmonkey
Copy link

mandelmonkey commented Nov 11, 2020

do you guys know if there is an rcon command I can call to get the players score in cs:go?

@Taraman17
Copy link
Contributor Author

do you guys know if there is an rcon command I can call to get the players score in cs:go?

A little off-topic, but no, not that I know. Candidates would be "status" or "users", but both don't show scores.

For this you would need server Queries:
https://developer.valvesoftware.com/wiki/Server_queries#A2S_PLAYER

Alternatively you could parse logs to track scores.
I'm developing a server API (for linux servers) using nodejs, which does this (not for scores yet, but I plan to implement that too):
https://github.com/Taraman17/nodejs-csgo-api

@t-davies
Copy link

FYI, just ran into this problem and the posted fix is slightly incorrect - or at least it appears to be with the latest versions of CSGO at least. This is what we ended up running with.

if (type === Protocol.SERVERDATA_AUTH && decodedPacket.type !== Protocol.SERVERDATA_AUTH_RESPONSE) {
    /**
     * Since May 2020 reports have arisen about CSGO servers sending 0x00 but not confirming auth
     * with 0x02. This is a temporary solution that solves the problem.
     */
    if (decodedPacket.body !== '') {
        if (decodedPacket.body === '\u0000\u0000\n\u0000\u0000\u0000\u0019\t\u0000\u0000\u0002\u0000\u0000\u0000') {
            resolve('success')
        } else {
            reject(Error('Unable to authenticate'))
        }
        this.connection.removeListener('data', onData)
    }
    return
}

@Taraman17
Copy link
Contributor Author

Is this still on the roadmap with 2.x?

@erfanasbari
Copy link

This issue is happening with CoD4x servers too.
When I call authenticate() right after 2 or 3 seconds for second time it doesn't resolve or reject the promise.

I'm using npm and I don't know how to fix it with the code above; can somebody tell me? Thanks <3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants