ildm6 update

This commit is contained in:
Olaf Rempel 2006-12-20 20:47:47 +01:00
parent ce59a8853e
commit aee280ca5c
6 changed files with 35 additions and 19 deletions

5
.gitignore vendored
View File

@ -1,5 +1,6 @@
*.d
*.o *.o
*.o *.so
masterquery masterquery
hlswmaster hlswmaster
*.so hlswmaster.log

View File

@ -33,11 +33,10 @@ plugin p_ut2k4.so
[hlswproxy] [hlswproxy]
## ask these hlswmasters ## ask these hlswmasters
scan 10.10.0.1:7140 #scan 10.10.0.1:7140
scan 10.10.0.2:7140 #scan 10.10.0.2:7140
[halflife] [halflife]
## allow these nets ## allow these nets
valid_net 10.10.0.0/16 valid_net 10.10.0.0/16
valid_net 172.16.0.0/16 valid_net 172.16.0.0/16

View File

@ -21,6 +21,7 @@ struct _entry {
static char hlswheader[] = "\xFF\xFF\xFF\xFFHLSWLANSEARCH"; static char hlswheader[] = "\xFF\xFF\xFF\xFFHLSWLANSEARCH";
#define id2name_count (sizeof(id2name) / sizeof(char *) -1)
static char *id2name[] = { static char *id2name[] = {
"Unknown", // 0 "Unknown", // 0
"Halflife", "Halflife",
@ -68,9 +69,12 @@ static char *id2name[] = {
"Starwars: Battlefront (?)", "Starwars: Battlefront (?)",
"SWAT 4", "SWAT 4",
"Battlefield 2", // 45 "Battlefield 2", // 45
"(unknown)", "unknown",
"Quake 4 (?)", "Quake 4",
"Call of Duty 2" "Call of Duty 2",
"unknown",
"FEAR", // 50
"Warsow(?)"
}; };
static int sock, verbose = 0; static int sock, verbose = 0;
@ -93,9 +97,10 @@ static void parse_pkt(struct sockaddr_in *src, void *pkt, unsigned int size)
server = pkt + sizeof(hlswheader); server = pkt + sizeof(hlswheader);
while ((void *)server < pkt + size) { while ((void *)server < pkt + size) {
tmp.s_addr = server->ip; tmp.s_addr = server->ip;
printf(" ip=%15s port1=%5d port2=%5d gameid=%2d (%s)\n", printf(" ip=%15s port1=%5d port2=%5d gameid=%2d (%s)\n",
inet_ntoa(tmp), server->port1, server->port2, inet_ntoa(tmp), server->port1, server->port2,
server->gameid, id2name[server->gameid]); server->gameid, server->gameid <= id2name_count ? id2name[server->gameid] : "unknown");
server++; server++;
} }
} }
@ -104,13 +109,13 @@ static void parse_pkt(struct sockaddr_in *src, void *pkt, unsigned int size)
static int scan_init() static int scan_init()
{ {
int i = 1; sock = socket(PF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket()"); perror("socket()");
return -1; return -1;
} }
unsigned int i = 1;
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &i, sizeof(i))) { if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &i, sizeof(i))) {
perror("setsockopt()"); perror("setsockopt()");
return -1; return -1;

View File

@ -33,6 +33,7 @@ static struct scan_ports port_arr[] = {
{ 23000, 23010, 35 }, /* bfv(35) */ { 23000, 23010, 35 }, /* bfv(35) */
{ 26001, 26011, 19 }, /* igi2(19) */ { 26001, 26011, 19 }, /* igi2(19) */
{ 27888, 27888, 17 }, /* avp2(17) (nur der standart-port..) */ { 27888, 27888, 17 }, /* avp2(17) (nur der standart-port..) */
{ 44400, 44400, 51 },
{ 0, 0, 0 } { 0, 0, 0 }
}; };
@ -66,6 +67,7 @@ static char reply_avp2[] = "avp2\\";
static char reply_igi2[] = "projectigi2r\\"; static char reply_igi2[] = "projectigi2r\\";
static char reply_aao[] = "armygame\\"; static char reply_aao[] = "armygame\\";
static char reply_rune[] = "rune\\"; static char reply_rune[] = "rune\\";
static char reply_postal2[] ="postal2\\";
static int scan(void) static int scan(void)
{ {
@ -152,6 +154,11 @@ static int parse_real(struct net_pkt *pkt, int gameid)
/* americas army operations */ /* americas army operations */
else if (!pkt_memcmp(pkt, pos1, reply_aao, strlen(reply_aao))) else if (!pkt_memcmp(pkt, pos1, reply_aao, strlen(reply_aao)))
gameid = 15; gameid = 15;
/* postal2 */
else if (!pkt_memcmp(pkt, pos1, reply_postal2, strlen(reply_postal2)))
gameid = 9;
else else
return PARSE_REJECT; return PARSE_REJECT;
break; break;

View File

@ -101,7 +101,7 @@ static int scanner_receive(int fd, void *privdata)
return 0; return 0;
} }
int i = sizeof(struct sockaddr_in); unsigned int i = sizeof(struct sockaddr_in);
pkt->size = recvfrom(fd, pkt->buf, recvsize, 0, (struct sockaddr *)&pkt->addr, &i); pkt->size = recvfrom(fd, pkt->buf, recvsize, 0, (struct sockaddr *)&pkt->addr, &i);
if (pkt->size < 0) { if (pkt->size < 0) {
@ -111,11 +111,15 @@ static int scanner_receive(int fd, void *privdata)
} }
switch (plugins_parse(pkt)) { switch (plugins_parse(pkt)) {
case PARSE_REJECT: case PARSE_REJECT: {
log_print(LOG_INFO, "scanner_receive(): unknown packet: %s:%d size:%d", char *pkt_str = pkt_print(pkt);
log_print(LOG_INFO, "scanner_receive(): unknown packet: %s:%d size:%d\n%s",
inet_ntoa(pkt->addr.sin_addr), inet_ntoa(pkt->addr.sin_addr),
ntohs(pkt->addr.sin_port), ntohs(pkt->addr.sin_port),
pkt->size); pkt->size, pkt_str);
free(pkt_str);
}
case PARSE_ACCEPT: case PARSE_ACCEPT:
free(pkt); free(pkt);

View File

@ -34,8 +34,8 @@
#include "netpkt.h" #include "netpkt.h"
#include "gamelist.h" #include "gamelist.h"
#define HLSW_HEADER "\xFF\xFF\xFF\xFFHLSWLANSEARCH\x00" #define HLSW_HEADER "\xFF\xFF\xFF\xFFHLSWLANSEARCH"
#define HLSW_HEADER_LEN 0x12 #define HLSW_HEADER_LEN 0x11
#define HLSW_ENTRY_LEN 10 #define HLSW_ENTRY_LEN 10
#define MAX_PKT_LEN (HLSW_HEADER_LEN + HLSW_ENTRY_LEN * 140) #define MAX_PKT_LEN (HLSW_HEADER_LEN + HLSW_ENTRY_LEN * 140)
@ -89,7 +89,7 @@ static int server_handler(int fd, void *privdata)
struct sockaddr_in client; struct sockaddr_in client;
unsigned char buf[32]; unsigned char buf[32];
int i = sizeof(client); unsigned int i = sizeof(client);
int ret = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&client, &i); int ret = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&client, &i);
if (ret <= 0) { if (ret <= 0) {
log_print(LOG_WARN, "server_handler(): recvfrom()"); log_print(LOG_WARN, "server_handler(): recvfrom()");