208 Commits

Author SHA1 Message Date
dba07aacf7 Update CHANGELOG.md 2024-12-06 12:35:30 +02:00
bd76b897de Fix missing newlines in Minecraft RCON messages:
Minecraft servers have a longstanding bug that omits newlines
when sending messages via RCON. This patch manually inserts
newlines to address the issue.

Reference: https://bugs.mojang.com/browse/MC-7569

Fixes #1
2024-12-06 11:00:18 +02:00
1106f27700 Bump version to 0.8.0 2024-12-06 08:47:45 +02:00
00fc3b5bcb Set select() timeout to 5 seconds and replace putchar() loop with fputs() call 2024-12-06 08:47:45 +02:00
a0fe9e1645 Enable input/output buffering and fflush only explicitly
As suggested in old pull request: #39
2024-12-06 08:47:45 +02:00
5f460e8912 Remove Valve protocol checks and set select() timeout to 1.5 seconds
Use the same method for handling multipacket responses across all servers.
2024-12-06 08:47:45 +02:00
6fed74ba74 Implement select() loop to receive all incoming packets:
Send a "multipacket guard" - an empty packet with an invalid 'cmd' field
and a unique packet ID to trigger a reply from the server once the previous
command's reply has been fully sent.

Valve returns an empty payload, while Minecraft includes an error message in the payload.

This workaround ensures that all packets related to the last valid command
are received from the server, avoiding the need to wait for the select() timeout.
2024-12-06 08:47:45 +02:00
5d1c87b26f Don't call memcpy() if there is nothing to copy 2024-12-04 08:17:56 +02:00
fd77ad7fc0 packet_build(): add [static 1] to generate warning if NULL pointer is passed 2024-12-03 05:40:45 +02:00
bc5617407d Update CHANGELOG.md 2024-12-02 10:40:51 +02:00
5ae06f4d37 Update man page 2024-12-02 10:35:00 +02:00
233031cdcb Update README.md 2024-12-02 10:31:38 +02:00
ebf5172cd0 Update BUILDING.md 2024-12-02 10:13:38 +02:00
0b72e4d17d Update README.md 2024-12-02 09:56:06 +02:00
af70f87bc1 Update README.md 2024-12-02 09:52:30 +02:00
53fd703911 Rename INSTALL.md to BUILDING.md 2024-12-02 09:42:44 +02:00
c0d28bcb17 Rename INSTALL.md to BUILDING.md 2024-12-02 09:42:11 +02:00
edf8344983 Add "-Wno-gnu-zero-variadic-macro-arguments" flag to suppress Clang warnings about GNU macro extensions 2024-12-02 09:37:08 +02:00
a502204e26 Remove unused headers 2024-12-02 09:34:48 +02:00
7162bc6fe6 - add log_error macro
- rename "flag_connection_alive" variable back to "global_connection_alive"
- return exit code from run_terminal_mode()
- rcon_command(): add error messages
2024-12-02 08:55:18 +02:00
f270a485b5 Remove url from version string 2024-12-02 07:40:34 +02:00
df66816bee Change prefix of flag variables from 'global' to 'flag' 2024-12-02 07:37:12 +02:00
5c7ab407d7 Patch of various fixes, cleanups and unused code removals:
- add MAX_COMMAND_LENGTH to define maximum command length
 - print auth failed message to stderr instead of stdout
 - remove unused net_send() function
 - remove unused net_clean_incoming() function
 - rewrite net_send_packet() function
 - net_recv_packet(): change the type of variable "ret" from int to ssize_t
 - net_recv_packet(): fail immediately if the packet size is out of spec
 - packet_print(): rename variable "def_color" to "default_color"
 - packet_print(): remove unecessary casts
 - packet_build(): use MAX_COMMAND_LENGTH
 - packet_build(): be more explicit in calculation of packet.size
 - packet_build(): use memcpy() instead of strncpy()
 - cast second argument of send()/recv() calls to (char *) so Windows is happy
 - rcon_auth(): change the return type from int to bool
 - run_terminal_mode(): use MAX_COMMAND_LENGTH
2024-12-02 07:32:07 +02:00
c83d96cc91 Add "$(EXENAME).exe" to clean rule so Windows executables are also cleaned up 2024-12-02 06:14:34 +02:00
427fd206ca Oops, uncomment struct field 2024-11-11 23:49:18 +02:00
1a4010cbba Change MAX_PACKET_SIZE and DATA_BUFFSIZE, add notes about packet structure 2024-11-11 22:22:45 +02:00
4488127350 Use fixed width integer types in rcon packet structure 2024-11-10 16:25:19 +02:00
6b563df23d Update README.md 2024-11-09 20:53:55 +02:00
5a2dcf41ac Update README.md 2024-11-09 20:51:36 +02:00
7d3f3c1d61 Update README.md 2024-11-09 20:46:53 +02:00
fc040ce5ea Change maximum packet size to correct value (4096 -> 4106) 2024-11-09 15:22:42 +02:00
489306d4a2 Add windows batch scripts 2024-11-09 13:48:23 +02:00
a8e2a9349e Exit with appropriate return code if password is not provided, fixes #87 2024-11-07 21:39:37 +02:00
deed43ad61 Makefile macOS fix, resolves #82, resolves #102
- Remove "ginstall" as "install" replacement on macOS
- Remove "-D" flag from "install" parameters
2024-11-07 17:14:25 +02:00
aa933d2c1f Add support for Valve style authentication, fixes #106 2024-11-07 14:59:31 +02:00
accae57e4b Remove ".travis.yml" 2024-11-07 14:21:31 +02:00
fa25cde79c Modify compilation flags:
- Remove "-s" flag
- Change stack protector mode from "strong" to "all"
- Change optimization level from "-Os" to "-O2"
2024-11-07 14:06:48 +02:00
e96b2eff6e Remove broken Travis CI links and update package list 2024-11-07 13:54:40 +02:00
b5951e9634 Merge pull request #83 from Tiiffi/develop
Merge develop to master
2021-10-30 22:34:42 +03:00
7b8ea2bf39 Update copyright year 2021-10-30 22:30:12 +03:00
05aaff88d4 Update version information, changelog and readme 2021-10-30 22:21:25 +03:00
fca278e092 - Quit gracefully when Ctrl-D or Ctrl-C is pressed
- Remove "exit" and "quit" as quit commands
2021-10-30 22:16:29 +03:00
b3147ebe43 Fix erroneous string length check 2021-02-15 04:31:07 +02:00
48c065c304 Use setvbuf() instead of fflush() 2021-02-15 03:29:44 +02:00
29a1c99f82 Merge pull request #53 from AddisonG/master
Fix compiler warning
2021-02-12 04:23:54 +02:00
bf11460a0d Merge pull request #39 from kabiroberai/master
Flush stdout when needed
2021-02-08 22:51:54 +02:00
3e8acd5e42 Merge pull request #62 from jbaldus/master
Fixes typo in ANSI escape sequence for LCYAN
2021-02-08 05:16:11 +02:00
ada14bb4d9 Fixes typo in ANSI escape sequence for LCYAN 2021-01-13 19:22:02 -05:00
336f528668 Fixed compiler bug
This fixes the compiler issue:

```
mcrcon.c: In function ‘packet_build’:
mcrcon.c:576:2: warning: ‘strncpy’ specified bound 4096 equals destination size [-Wstringop-truncation]
  strncpy(packet.data, s1, DATA_BUFFSIZE);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
2020-08-12 14:10:58 +10:00
58a7a86bc3 Flush stdout when needed
This is required on certain machines (eg the iSH emulator on iOS)
2020-01-31 17:26:27 +05:30
b02201d689 Merge pull request #37 from Tiiffi/develop
Update CHANGELOG.md
2020-01-02 03:14:12 +02:00
4cff2fe537 Update CHANGELOG.md 2020-01-02 03:11:50 +02:00
0d11c6a4e9 Update README.md 2020-01-02 02:40:05 +02:00
9c68d9cdd4 Update README.md 2020-01-02 02:30:12 +02:00
6d49968df3 Update README.md 2020-01-02 02:28:52 +02:00
b118b7b7b9 Change year in copyright texts and manual page 2020-01-02 02:22:44 +02:00
253fb70a72 Merge branch 'develop' 2020-01-02 02:15:27 +02:00
f351fb134e - Deprecate -i flag for terminal mode
- Use strcasecmp() instead strcmp() to check exit command
2019-12-22 16:27:36 +02:00
af5e88b528 Update Makefile 2019-12-22 00:05:31 +02:00
83cdaae362 Update version number 2019-12-21 23:13:19 +02:00
876201fe5a Add workaround to prevent server-side bug.
https://bugs.mojang.com/browse/MC-154617
2019-12-21 23:12:39 +02:00
3c071c0c45 - Add exit string detection
- Stylistic change in getopt loop
2019-12-21 22:25:08 +02:00
d2ebbd8f12 Update various document files 2019-12-21 22:16:34 +02:00
cffa73d223 Remove unused functions 2019-12-20 21:02:21 +02:00
c62d5c8a70 Update usage and version texts 2019-12-20 20:58:40 +02:00
8b75ddf4bf Indentation style change 2019-12-20 19:56:05 +02:00
4f3a455095 Add more validation to mcrcon_parse_seconds() 2019-12-19 17:34:19 +02:00
5fb20c2b83 Update mcrcon.1 and README.md 2019-12-19 17:32:47 +02:00
0c48fbb847 Remove unused option characters 2019-12-18 19:34:08 +02:00
fcc9d6d09b Tabs are evil 2019-12-18 19:19:30 +02:00
018592abc5 Code cleanups 2019-12-18 19:16:06 +02:00
de926b8c26 Merge branch 'develop' of https://github.com/Tiiffi/mcrcon into develop 2019-12-18 19:08:21 +02:00
0f796b6bbc Tidy code formatting 2019-12-18 19:06:37 +02:00
f9d9a02348 Update README.md 2019-12-18 18:29:31 +02:00
a8863e1fcc Merge branch 'develop' of https://github.com/Tiiffi/mcrcon into develop 2019-12-18 18:19:50 +02:00
83457075b9 Make command throttling argument parsing more robust 2019-12-18 18:19:08 +02:00
2f1f925ac1 Make command throttling more robust 2019-12-18 18:02:20 +02:00
8ff710e231 Update README.md 2019-12-18 18:00:45 +02:00
7737bc2a32 Update mcrcon.1 2019-12-18 18:00:31 +02:00
52e717a92b Update CHANGELOG.md 2019-12-18 18:00:11 +02:00
6cc26a8d8b Merge pull request #34 from HorlogeSkynet/master
Adds a `-w` option to throttle commands execution
2019-12-16 17:43:12 +02:00
5a0b9ea4e5 Let's avoid one more statement 2019-12-14 18:06:12 +01:00
a16d875626 Adds a -w option to throttle commands execution 2019-12-14 17:48:43 +01:00
8fdda295e2 Update mcrcon.1 2019-11-19 09:47:05 +02:00
0b1853dccc Update INSTALL.md 2019-11-19 09:17:20 +02:00
d338537e23 Update README.md 2019-11-19 09:16:11 +02:00
fed62d9e14 Update INSTALL.md 2019-11-09 03:50:17 +02:00
4aab776687 Remove TODO 2019-11-08 23:16:03 +02:00
5c47b744f5 Update README.md 2019-11-08 22:20:32 +02:00
c27f683573 Update README.md 2019-11-08 22:11:40 +02:00
bc33bbe09e Update README.md 2019-11-08 22:10:35 +02:00
9eb7af2d71 Update README.md 2019-11-08 21:56:56 +02:00
3f1ea02756 Update README.md 2019-11-08 21:40:48 +02:00
a9ec7dc6ac Update README.md 2019-11-08 21:39:24 +02:00
2732e81ca8 Update README.md 2019-11-08 21:32:26 +02:00
9667e8f066 Change email text 2019-10-21 21:43:54 +03:00
16c2db5c78 Tidy up man page and usage text 2019-10-21 21:35:38 +03:00
8f561f803a Change bug report email address 2019-10-21 20:58:14 +03:00
7d5cb8016e Change DATA_BUFFSIZE to 4096 bytes 2019-10-21 14:23:41 +03:00
208e040305 Fix invalid free 2019-10-20 16:08:51 +03:00
cbbfdad94e Add newline 2019-10-20 16:06:15 +03:00
989dfd6928 Remove unused code 2019-10-20 16:01:45 +03:00
6bfd6801c9 Update version number and man page 2019-10-20 15:49:06 +03:00
f0580220e3 Merge from upstream develop 2019-10-20 15:39:44 +03:00
4dc7361641 Merge pull request #31 from northkillz/develop
Handle fragmented data transmission
2019-10-20 14:18:10 +03:00
0525c3776e Handle fragmented data transmission
* Resolve #25
2019-10-17 16:06:35 +09:00
408ec3b1c1 Add *.plist to .gitignore and change exit code (fix #29) 2019-10-15 15:30:43 +03:00
4f791c5e54 Update year. 2019-09-27 18:18:01 +03:00
a4166d7390 Makefile cleanup. 2019-09-27 16:23:42 +03:00
888fe0dd07 Fix file install locations. 2019-09-27 16:23:04 +03:00
21337ef5d7 Small fix. :-D 2019-09-20 13:50:20 +03:00
ac31d9bc5a Added check for fgets() return value. 2019-09-20 13:36:49 +03:00
60fa0e42d8 Added 'global' prefix for global variables and fixed 'rsock' variable shadowing. 2019-09-20 13:20:35 +03:00
00b812249f Merge pull request #26 from taingra/develop
Added default address set to localhost
2019-07-04 21:33:11 +03:00
872ddccbfc Set default address to localhost 2019-07-01 00:03:41 -04:00
67a665a2e4 Fixed markdown headings in changelog 2019-06-30 23:51:53 -04:00
1cab4cf4db Merge pull request #24 from srakitnican/destdir
Makefile: Use DESTDIR
2019-05-04 10:22:11 +03:00
5dc3de375a Makefile: Use DESTDIR 2019-05-03 16:33:25 +02:00
42939a6a1c Markdown headers fixed. 2019-04-15 18:27:31 +03:00
f4fb9e27ab updated CHANGELOG.md 2019-04-15 09:31:16 +03:00
a2b2117af5 Incrementing version number 2019-04-15 09:03:49 +03:00
1c5d807121 Merge pull request #20 from Hagb/develop
Fix UTF-8 and something about color code
2019-04-15 08:37:27 +03:00
42f06c89a8 Fix UTF-8 and something about color code 2017-08-17 23:36:04 +08:00
60f8dc946c Added travis-ci build status images. 2017-01-09 15:31:28 +02:00
10789a7c44 Force compiler on Windows. 2017-01-07 11:36:52 +02:00
6523e58d4a Merge pull request #16 from meatballhat/macos-touchup
Touchups for MacOS
2017-01-04 23:09:11 +02:00
02ae39747e Changes per feedback on #16 2017-01-03 15:40:43 -05:00
9ccea062c6 Merge pull request #15 from meatballhat/env-var-typo
Fix env var typo in man page
2016-12-28 01:17:12 +02:00
64c8c6ba16 Define EXTRAFLAGS to avoid issues with -fstack-protector-strong 2016-12-27 11:49:35 -05:00
f02e32793d More make and CI bits tweaks 2016-12-27 11:43:21 -05:00
b4a64d21cd More touchups to CI bits 2016-12-27 11:40:18 -05:00
afbed173aa Merge remote-tracking branch 'origin/macos-touchup' into travis-maybe 2016-12-27 11:37:15 -05:00
56389a8bec Add some Travis integration 2016-12-27 11:33:52 -05:00
0198ca77a7 Touchups for MacOS 2016-12-26 22:12:00 -05:00
598297b9c6 Fix env var typo in man page 2016-12-26 22:00:26 -05:00
1d559bd8ef Update INSTALL 2016-12-17 20:20:27 +02:00
3fdf9d570d Version history draft for v0.6.0, updated version numbering and changed console prompt character back to original one. 2016-12-17 20:17:32 +02:00
f54b2efd21 Update README.md 2016-12-17 20:12:53 +02:00
a043b6fa54 Update README.md 2016-12-17 20:10:20 +02:00
c5d1e95ef8 Update README.md 2016-12-16 21:45:08 +02:00
d0e293f249 Changed program return values to EXIT_FAILURE and EXIT_SUCCESS macros. 2016-12-16 21:39:30 +02:00
46e7ed1781 Fix README.md markdown formatting. 2016-12-16 21:22:09 +02:00
2f8c462c0f Added support for setting basic options with environment variables. 2016-12-16 21:13:01 +02:00
b8776a0984 Removed unallowed newlines. 2016-12-14 00:31:32 +02:00
a416251bfb Merge branch 'develop' of https://github.com/Tiiffi/mcrcon into develop 2016-12-14 00:14:14 +02:00
6ef31675d8 Added EXTRAFLAGS variable to Makefile. 2016-12-14 00:13:12 +02:00
b878ff1255 Comment cleanups and munged output bug (https://github.com/Tiiffi/mcrcon/issues/2) fixed. 2016-12-14 00:10:49 +02:00
8441c578be Update README.md 2016-11-16 18:16:10 +02:00
29f1f9c400 Merge pull request #14 from Tiiffi/refactoring/networking
Refactoring/networking
2016-11-15 22:21:13 +02:00
951f39cdbd Merge branch 'refactoring/networking' of https://github.com/Tiiffi/mcrcon into refactoring/networking 2016-11-15 21:59:47 +02:00
57d0cdbf95 Minor cleanups. 2016-11-15 21:59:30 +02:00
71d10a0af0 Update README.md 2016-11-15 21:46:02 +02:00
93e3e54357 Update and rename COMPILING to INSTALL 2016-11-15 21:44:07 +02:00
16819a6992 Update README.md 2016-11-15 21:21:03 +02:00
1c5654de2d Update README.md 2016-11-15 21:19:20 +02:00
796fb23195 README.md update. 2016-11-15 21:17:53 +02:00
e763c4df73 Merge branch 'refactoring/networking' of https://github.com/Tiiffi/mcrcon into refactoring/networking 2016-11-15 21:14:40 +02:00
6f0af9964c Typo fixes. 2016-11-15 21:14:30 +02:00
d2b434daf9 Merge branch 'refactoring/networking' of https://github.com/Tiiffi/mcrcon into refactoring/networking 2016-11-15 21:14:16 +02:00
f879937329 Typo fix. 2016-11-15 21:13:48 +02:00
c9a740a3ce Added "Installing" paragraph. 2016-11-15 21:06:00 +02:00
4d12f96e21 Update COMPILING 2016-11-15 20:55:54 +02:00
46af96a3a4 Moved changelog and compiling to own files and updated usage info in README.md. 2016-11-15 20:41:58 +02:00
a0e638edc9 Code style changes. 2016-11-15 20:28:33 +02:00
f9595188d5 manpage improvements. 2016-11-15 19:48:28 +02:00
c1bfcbb611 Improved error messages and version flag info added to usage helper. 2016-11-15 19:48:10 +02:00
d92a60bed4 Added Install / uninstall rules to Makefile and made changes to error printing. Also now password is not set by default and terminal mode is activated automatically if there are no commands to execute. 2016-11-13 18:12:03 +02:00
449eac6358 Added manpage to the project. 2016-11-13 14:16:14 +02:00
88c91d4096 Updated compiler flags. 2016-11-13 14:15:29 +02:00
786767e9f1 License update. 2016-11-13 14:12:30 +02:00
edc750ccef Added packet_build_malloc() forward declaration and type cast to 2nd argument of send() function to silence windows compiler warnings. 2016-10-28 03:21:16 +03:00
3e60b0d28f Added Windows support to Makefile. 2016-10-28 01:41:38 +03:00
a0d3d7f52e Commented windows version define and changed net_init_WSA() to request Winsock version 2.2 instead of old 1.1. 2016-10-28 01:40:38 +03:00
4b663958aa README.md update. 2016-10-27 03:33:04 +03:00
cbbdbcca93 net_init_WSA() function and error reporting improvements. 2016-10-27 03:25:28 +03:00
c9e3f86a89 Makefile improvements. 2016-10-27 03:23:32 +03:00
c5731c1109 New indentation and changes in net_connect error reporting. 2016-10-26 21:08:09 +03:00
9c6c8e3069 Replaced some networking functions with new ones. 2015-11-19 07:16:00 +02:00
7605586324 Changed port in example command. 2015-11-04 22:31:09 +02:00
e8f685ff0a README and help tweaks. 2015-11-04 22:08:44 +02:00
0a803aab55 .gitignore update. 2015-11-04 22:07:53 +02:00
7e10b01691 Merge pull request #11 from Kotobaminers/develop
Cross compile support + gnu99
2015-10-15 00:59:23 +03:00
660a2a1e27 Cross compile support 2015-10-15 00:45:56 +03:00
915f9a7972 Update README.md 2015-01-20 04:53:47 +02:00
1c367aa725 Update README.md 2015-01-20 04:48:40 +02:00
4f1ec0c0f9 Update README.md 2015-01-20 04:45:36 +02:00
e4e0d95e5e Update README.md 2015-01-20 04:45:12 +02:00
26159e7cc3 Updated LICENSE. 2015-01-19 03:04:35 +02:00
873e7672fb Updated years in license text. 2015-01-19 02:12:33 +02:00
e924373898 Removed "more info" link from readme. 2015-01-19 02:10:54 +02:00
c503dedd37 Update README.md 2015-01-19 02:08:19 +02:00
e2b3bb16e3 Update README.md 2015-01-19 02:06:27 +02:00
5f05286170 Moving version history from source file to readme. 2015-01-19 02:02:42 +02:00
3ab3e51889 Merge pull request #8 from Kotobaminers/develop
Ignoring built file
2015-01-19 01:03:37 +02:00
0a117b008c Ignoring built file 2015-01-19 00:48:21 +02:00
d1266e97b3 Minor formatting changes. 2015-01-13 20:05:10 +02:00
1d8175faba Update README.md 2015-01-13 15:02:55 +02:00
79f0d7ad09 Merge pull request #6 from Kotobaminers/readme
Updating README.md with fixed indent (retry)
2015-01-13 14:49:24 +02:00
670e599554 Fixing indent 2015-01-13 14:38:13 +02:00
957ff80842 Merge pull request #3 from Kotobaminers/Makefile
Creating Makefile to easy compile
2015-01-13 14:32:40 +02:00
f5c0ab9fde Enable rcon section to README.md 2015-01-13 08:24:39 +02:00
062156a006 Adding Usage section to readme.md 2015-01-13 08:16:46 +02:00
044cd6640e Creating Makefile to easy compile 2015-01-13 07:54:14 +02:00
5b6c192686 Fixed indentation. 2015-01-05 11:02:50 +02:00
91ac3e3fac Reformatted help string. 2015-01-05 05:24:03 +02:00
64dc3ac2d0 Added "r" to options handler string. 2015-01-05 05:19:53 +02:00
9809d13d63 Updated help function and added raw output functionality in "packet_print" function. 2015-01-05 05:15:25 +02:00
b1a42cb993 New option -r (raw output) for opts parser. 2015-01-05 05:06:30 +02:00
10 changed files with 977 additions and 557 deletions

6
.gitignore vendored
View File

@ -2,5 +2,9 @@
*.o
*.dev
*.win
*.txt
*.layout
*.project
*.project
mcrcon
todo
*.plist

29
BUILDING.md Normal file
View File

@ -0,0 +1,29 @@
Building and installing
-----------------------
#### Requirements & dependencies:
- GCC compatible compiler
- POSIX getopt support from **<unistd.h>**
---
#### Compiling
cc -std=gnu99 -Wpedantic -Wall -Wextra -Wno-gnu-zero-variadic-macro-arguments -O2 -o mcrcon mcrcon.c
>[!NOTE]
>If you are compiling on Windows remember to link with winsock by adding `-lws2_32` to your compiler command line.
---
Or you can run **make**
make - compiles mcrcon
make install - installs compiled binaries and manpage to the system
make uninstall - removes binaries and manpage from the system
file install locations:
/usr/local/bin/mcrcon
/usr/local/share/man/man1/mcrcon.1
Makefile **install** and **uninstall** rules are not available on Windows.

96
CHANGELOG.md Normal file
View File

@ -0,0 +1,96 @@
#### Version history:
###### 0.8.0
- Implement support for multipacket responses
- Add support to Valve style rcon authentication
- Change maximum packet size to correct value (4096 -> 4106)
- Attempt to add missing newlines in Minecraft servers
* Currently implemented only for the 'help' command
- Print auth failed message to stderr instead of stdout
- Fail immediately if received packet size is out of spec
- Return proper exit code from run_terminal_mode()
- Add error messages to rcon_command() function
###### 0.7.2
- Quit gracefully when Ctrl-D or Ctrl+C is pressed
- Remove "exit" and "quit" as quitting commands
* These are actual rcon commands on some servers
- Suppress compiler warning (strncpy)
- Fix erroneous string length in packet building function
- Fix typo in ANSI escape sequence for LCYAN
- Make stdout and stderr unbuffered
###### 0.7.1
- Deprecate `-i` flag for invoking terminal mode
- Add workaround to prevent server-side bug.
* https://bugs.mojang.com/browse/MC-154617
###### 0.7.0
- Add -w option for rcon command throttling
* Thanks HorlogeSkynet @ Github
###### 0.6.2
- Set default address to localhost
###### 0.6.1
- Color coding fixed
* Thanks to Hagb @ Github
###### 0.6.0
- Version numbering changed to more sane system (0.0.5 -> 0.6.0)
- Fixed munged output
- Support for using environment variables to set some basic options
- Cleaned networking code
- Various code cleanups
- Changes and updates in usage text and error reporting
- Version option flag (-v) added
- Man page added
- Proper makefile added
###### 0.0.5
- IPv6 support!
* Thanks to 'Tanja84dk' for addressing the real need of IPv6.
- Fixed bug causing crash / segmentation fault (invalid write) when receiving malformed rcon packet.
- Program makes use of C99 feature (variable-length arrays) so "-std=gnu99" flag on
GCC-compiler must be used to avoid unecessary warnings.
- Rcon receive buffer is now bigger (2024 bytes -> 10240 bytes).
* Thanks to 'gman_ftw' @ Bukkit forums.
- Fixed invalid error message when receiving empty rcon packet (10 bytes).
* Thanks to 'pkmnfrk' @ bukkit forums.
- Terminal mode now closes automatically when rcon socket is closed by server
or if packet size cannot be retrieved correctly.
- Client now tries to clean the incoming socket data if last package was out of spec.
###### 0.0.4
- Reverted back to default getopts options error handler (opterr = 1).
Custom error handler requires rewriting.
- Some cosmetic changes in program output strings.
- Program usage(); function now waits for enter before exiting on Windows.
###### 0.0.3
- Colors are now supported on Windows too!
- Terminal mode is now triggered with "-t" flag. "-i" flag still works for
backwards compatibility.
- Bug fixes (Packet size check always evaluating false and color validity
check always evaluating true).
###### 0.0.2
- License changed from 'ISC License' to 'zlib/libpng License'.
- Bug fixes & code cleanups
- Interactive mode (-i flag). Client acts as interactive terminal.
- Program return value is now the number of rcon commmands sent successfully.
If connecting or authentication fails, the return value is -1.
- Colors are now enabled by default. Now '-c' flag disables the color support.
###### 0.0.1
- Added experimental support for bukkit colors.
Should work with any sh compatible shell.
- Packet string data limited to max 2048 (DATA_BUFFSIZE) bytes.
No idea how Minecraft handles multiple rcon packets.
If someone knows, please mail me so I can implement it.

View File

@ -1,4 +1,4 @@
Copyright (c) 2012-2013, Tiiffi <tiiffi --> gmail_dot_com>
Copyright (c) 2012-2024, Tiiffi <tiiffi at gmail>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@ -17,4 +17,4 @@ freely, subject to the following restrictions:
misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
distribution.

47
Makefile Normal file
View File

@ -0,0 +1,47 @@
# if you want to cross compile:
# export PATH=$PATH:/path/to/compiler/bin
# export CROSS_COMPILE=arm-none-linux-gnueabi-
# make
#
# Windows cross compile:
# x86_64-w64-mingw32-gcc -std=gnu99 -Wall -Wextra -Wpedantic -O2 -fstack-protector-all -o mcrcon.exe mcrcon.c -lws2_32
EXENAME = mcrcon
PREFIX ?= /usr/local
INSTALL = install
LINKER =
RM = rm -v -f
CC ?= gcc
CFLAGS = -std=gnu99 -Wall -Wextra -Wpedantic -Wno-gnu-zero-variadic-macro-arguments -O2
EXTRAFLAGS ?= -fstack-protector-all
ifeq ($(OS), Windows_NT)
LINKER = -lws2_32
EXENAME = mcrcon.exe
RM = cmd /C del /F
endif
.PHONY: all
all: $(EXENAME)
$(EXENAME): mcrcon.c
$(CROSS_COMPILE)$(CC) $(CFLAGS) $(EXTRAFLAGS) -o $@ $< $(LINKER)
ifneq ($(OS), Windows_NT)
.PHONY: install
install:
$(INSTALL) -v $(EXENAME) $(DESTDIR)$(PREFIX)/bin/$(EXENAME)
$(INSTALL) -v -m 0644 mcrcon.1 $(DESTDIR)$(PREFIX)/share/man/man1/mcrcon.1
@echo "\nmcrcon installed. Run 'make uninstall' if you want to uninstall.\n"
.PHONY: uninstall
uninstall:
$(RM) $(DESTDIR)$(PREFIX)/bin/$(EXENAME) $(DESTDIR)$(PREFIX)/share/man/man1/mcrcon.1
@echo "\nmcrcon uninstalled.\n"
endif
.PHONY: clean
clean:
$(RM) $(EXENAME) $(EXENAME).exe

108
README.md
View File

@ -1,10 +1,108 @@
####Compiling:
# mcrcon
```gcc -std=gnu11 -pedantic -Wall -Wextra -O2 -s -o mcrcon mcrcon.c```
mcrcon is a command-line [rcon](https://developer.valvesoftware.com/wiki/Source_RCON_Protocol) client intended for remote server administration and maintenance automation.
Though originally developed for Minecraft servers, it also works with a variety of other servers using the Valve or Minecraft-style rcon protocol.
On windows, remember to link with winsockets.
Add ```-lws2_32``` to compiler command line on Mingw GCC.
---
More info [here](http://forums.bukkit.org/threads/admin-rcon-mcrcon-remote-connection-client-for-minecraft-servers.70910/).
### Installing
##### Binary releases
Pre-built binaries are provided for Linux and Windows: https://github.com/Tiiffi/mcrcon/releases/latest
##### Via package manager
See https://pkgs.org/download/mcrcon and https://repology.org/project/mcrcon/packages for available packages in various Linux distros (note that some packages might be outdated).
- Fedora: https://packages.fedoraproject.org/pkgs/mcrcon/mcrcon/
- Gentoo: https://packages.gentoo.org/packages/games-util/mcrcon
- Arch: https://aur.archlinux.org/packages/mcrcon/
- NixOS: https://search.nixos.org/packages?show=mcrcon
- Snapcraft: https://snapcraft.io/mcrcon-nsg
- Scoop: https://scoop.sh/#/apps?q=mcrcon
##### Building from sources
```sh
git clone https://github.com/Tiiffi/mcrcon.git
cd mcrcon
make
# install is optional
sudo make install
```
_Check [BUILDING.md](BUILDING.md) for more details._
---
### Usage
mcrcon [OPTIONS] [COMMANDS]
Sends rcon commands to Minecraft server.
```
Option:
-H Server address (default: localhost)
-P Port (default: 25575)
-p Rcon password
-t Terminal mode
-s Silent mode
-c Disable colors
-r Output raw packets
-w Wait for specified duration (seconds) between each command (1 - 600s)
-h Print usage
-v Version information
```
Server address, port and password can be set using following environment variables:
```
MCRCON_HOST
MCRCON_PORT
MCRCON_PASS
```
###### Notes:
- mcrcon will start in terminal mode if no commands are given
- Command-line options will override environment variables
- Rcon commands with spaces must be enclosed in quotes
###### Example:
Send three commands ("say", "save-all", "stop") and wait five seconds between the commands:
```sh
mcrcon -H my.minecraft.server -p password -w 5 "say Server is restarting!" save-all stop
```
---
> [!TIP]
>Enable RCON on Minecraft server by adding following lines to [```server.properties```](https://minecraft.gamepedia.com/Server.properties) configuration file.
>```
>enable-rcon=true
>rcon.port=25575
>rcon.password=your_rcon_pasword
>```
---
### Contact
* WWW: https://github.com/Tiiffi/mcrcon/
* MAIL: tiiffi+mcrcon at gmail
* ISSUES: https://github.com/Tiiffi/mcrcon/issues/
> [!TIP]
>When reporting issues, please provide the following information:
>
>- Version of mcrcon: Please specify the precise version number
>- Game: Indicate the specific game server you're using (e.g., Minecraft, Valve Source Engine game, ARK, ...)
>- Server version: Provide the exact version of the game server
>- Mods and Extensions: List all mods and extensions used, including their versions
>- Issue Description: Clearly describe the problem you're encountering and the expected behavior.
>- Steps to reproduce
>
>If you're tech-savvy, consider providing a packet capture file (PCAP). Remember to use a fake password.
---
### License
This project is licensed under the zlib License - see the [LICENSE](LICENSE) file for details.

31
create_shortcut.bat Normal file
View File

@ -0,0 +1,31 @@
@echo off
@cls
@set /p host="Enter host (default: "127.0.0.1"): "
@if "%host%"=="" set host=127.0.0.1
@set /p port="Enter port (default: 25575): "
@if "%port%"=="" set port=25575
@set /p passwd="Enter password: "
@if "%passwd%"=="" set passwd=
set name=connect_%host%-%port%
@set /p name="Enter shortcut name (default: "%name%.bat"): "
@if "%name%"=="" set name=connect_%host%-%port%
set command=@mcrcon.exe -t -H %host% -P %port% -p %passwd%
@echo %command% >> %name%.bat
@echo.
@echo Command: "%command%"
@echo.
@echo Shortcut "%name%.bat" created!
@echo.
@set "host="
@set "port="
@set "passwd="
@pause

29
launch.bat Normal file
View File

@ -0,0 +1,29 @@
@echo off
@cls
@if not exist mcrcon.exe (
@echo ERROR: Cannot find "mcrcon.exe". Bailing out!
@echo.
@pause
@exit
)
@set /p host="Enter host (default: 127.0.0.1): "
@if "%host%"=="" set host=127.0.0.1
@set /p port="Enter port (default: 25575): "
@if "%port%"=="" set port=25575
@set /p passwd="Enter password: "
@if "%passwd%"=="" set passwd=
@echo.
mcrcon.exe -t -H %host% -P %port% -p %passwd%
@echo.
@set "host="
@set "port="
@set "passwd="
@pause

66
mcrcon.1 Normal file
View File

@ -0,0 +1,66 @@
.\" Process this file with
.\" groff -man -Tascii mcrcon.1
.\"
.TH MCRCON 1 "December 2024" "Version 0.8.0"
.SH NAME
mcrcon \- send rcon commands to a Minecraft server
.SH SYNOPSIS
.B mcrcon [
options
.B ] [
commands
.B ]
.SH DESCRIPTION
mcrcon is a command-line rcon client intended for remote server administration and maintenance automation.
.SH OPTIONS
.IP -H
Server address (default: localhost)
.IP -P
Port (default: 25575)
.IP -p
Rcon password
.IP -t
Terminal mode
.IP -s
Silent mode
.IP -c
Disable colors
.IP -r
Output raw packets
.IP -w
Wait for specified duration (seconds) between each command (1 - 600s)
.IP -h
Print usage
.IP -v
Output version information
.PP
Commands with spaces must be enclosed in quotes.
.br
mcrcon will start in terminal mode if no commands are given.
.SH ENVIRONMENT VARIABLES
Server address, port and password can be set with following environment variables:
.PP
\fBMCRCON_HOST
.br
\fBMCRCON_PORT
.br
\fBMCRCON_PASS\fR
.PP
Note that command-line options will override environment variables.
.SH EXAMPLES
Make rcon connection in terminal mode using default port
.RS
\fBmcrcon\fR -H my.minecraft.server -p password
.RE
.PP
Send "weather clear" command to server using custom port 1337
.RS
\fBmcrcon\fR -H my.minecraft.server -P 1337 -p password "weather clear"
.RE
.PP
Send three commands ("say", "save-all", "stop") and wait five seconds between the commands.
.RS
\fBmcrcon\fR -H my.minecraft.server -p password -w 5 "say Server is restarting!" save-all stop
.RE
.SH BUGS
Report bugs to \fBtiiffi+mcrcon at gmail\fR or \fBhttps://github.com/Tiiffi/mcrcon/issues/\fR

1118
mcrcon.c

File diff suppressed because it is too large Load Diff