2012-03-07 1 views
2

광산 기술 서버에 연결하여 패킷을 수신하고 패킷을 보내는 스크립트가 있습니다.Python Parse Minecraft 패킷

그래서 '로그인'패킷을 보내고 '로그인'패킷을받습니다. 안타깝게도 수신 된 로그인 패킷은 인코딩됩니다 (여기에 인코딩에 대한 정보 : http://wiki.vg/Protocol#0x01).

수신 된 로그인 패킷은 received_login_packet이라는 변수에 저장됩니다. 패킷 유형, 크기 등과 같은 데이터의 개별 비트를 얻을 수 있도록 디코드해야합니다.

저는 약간 둘러 봤지만 어떻게해야 할 지 전혀 모릅니다. 이 일을하려고하는 것. 도움이된다면

여기에 일부 코드입니다 :

#encoding the packet to send 
encuserlen = str(len(enc_user)) # enc_user is just my username 
packfmt = '>bih%sshiibBB' % encuserlen 
packetbytes = struct.pack(packfmt, 1, 28, len(data['user']), enc_user, 0, 0, 0, 0, 0, 0) 
s.send(packetbytes) 
time.sleep(2) 
#login packet sent, waited for response 
response = s.recv(1024) #this is the raw login response. 
#it's encoded as detailed above. i want to decode it 

어떤 도움을 주시면 감사하겠습니다 그것은 충분히 명확 아니라면 말을 주저하지 말아 주시기 바랍니다.

+0

충분히 명확하지 않습니다. 코드 샘플을 포함하십시오. – Will

+0

더 좋습니까? 정말 필요한 것은 아니지만 몇 가지 코드를 추가했습니다. 필요한 정보는 대부분 wiki 페이지에 있습니다. – Jack

답변

0

이 권리를 이해한다면 올바른 정보를 얻기 위해 1024 바이트의 패킷 응답을 디코딩하고 싶습니다. struct.pack 문을 사용할 수 있었던 것 같습니다. the documentation에서 볼 수있는 것과 비슷한 압축 해제 문이 있습니다. 기본적으로, 이렇게 보입니다.

packfmt = '>issiibBB' 
output=struct.unpack(packfmt,response) 

또한, 나는 당신의 요구를 잘 전송되는 것을 매우 확신 아니지만, 당신이 그것을 설정하는 방법을 파악하기 위해 나는 운동으로 떠날 것이다. format strings을 참조하십시오.

+0

이것은 옳지 않았지만 내 질문이 불분명하다는 것을 깨닫고 _a lot_를 푸는 방법을 찾는데 도움이되었습니다. – Jack

+0

오, 내가 생각한 그 실수는 뭐니? 나는 그것을 찾을 수없는 것 같습니다. :/ – Jack

+0

@ JackBeePee :'packfmt = '> bih % sshiibBB''는 맞지 않을 것입니다 ... – PearsonArtPhoto