Title | Nephthys |
Version | v1.0 |
Description | Nephthys is a native mod for Unreal 1 servers which extends IpDrv by efficient attack blocking, banning, player logging and other features. |
Release Date | 27.12.2004 |
Authors | Winged Unicorn, Zora |
Email Address | winged_unicorn@legendofvandora.net, zzora@gamebox.net |
Filenames | Nephthys_v1.0.zip |
DLLs | Nephthys.dll, IpDrv.dll |
Scripts | Nephthys.u |
Unreal Compatibility | 224v, 225f, 226b (Gold), 226f |
OS Compatibility | Windows 95, Windows 98/ME, Windows 2000, Windows XP, Windows NT 4, Linux (Wine) |
IpDrv.*
files of your Unreal\System
folderUnreal.ini
file of your Unreal\System
folderUnreal\System
folder, depending on the installed patchUnreal.ini
file by commenting out UdpServerQuery (or KrbServerQuery) and adding a new line, so that it looks like this:;ServerActors=IpServer.UdpServerQuery
ServerActors=Nephthys.NptServerQuery
Value | Description |
---|---|
ESM_Off | Don't show this event. If you just like to enjoy playing without getting informed how Nephthys works, then use this value everywhere. |
ESM_Silent | Show this event without beep. If you think Nephthys beeps too much, then use this value instead of ESM_Beep. |
ESM_Beep | Show this event and beep. If you usually ignore the chat and want to be beeped by Nephthys' events, then use this value instead of ESM_Silent. |
Option | Default | Description |
---|---|---|
ConnCountForDRJA TimeDeltaForDRJA |
10 10 |
Max number of new connections per TimeDeltaForDRJA seconds based on all IPs, more than this is considered to be a DRJA (Distributed Repetitive Join Attempt) attack, resulting in ignorance of all further join attempts until the attack is over. |
ShowDRJA | ESM_Beep | How to show detected DRJA attacks to all admins |
Option | Default | Description |
---|---|---|
bAutoBanRJA | false | Whether to add a ban rule for this IP automatically |
ConnCountForRJA TimeDeltaForRJA |
5 10 |
Max number of new connections per TimeDeltaForRJA seconds based on a single IP, more than this is considered to be a RJA (Repetitive Join Attempt) attack, resulting in ignorance of all further join attempts from this IP until the attack is over. |
ShowRJA | ESM_Beep | How to show detected RJA attacks to all admins |
Option | Default | Description |
---|---|---|
BanTable | all empty | All defined banning rules. Never change a setting here directly, or server will crash! Use the Ban commands instead. |
ShowBan | ESM_Beep | How to show any change of the ban table to all admins |
ShowSuspect | ESM_Silent | How to show any matching rules not applied due to (temporary) deactivation to all admins |
Option | Default | Description |
---|---|---|
ShowCmdError | ESM_Beep | How to show errors while executing remote admin commands. If your server is always accessible by server console you may set this option to ESM_Off. |
ShowCmdResult | ESM_Silent | How to show results of remote admin commands. If your server is always accessible by server console you may set this option to ESM_Off. |
Option | Default | Description |
---|---|---|
bKillDoubles | true | Whether to kill double connections of players with same IP / Name to get rid of unused (bandwidth eating) connections quickly. This may cause players with same IP having to connect one after each other, not both at once. |
HoldConnSeconds | 10 | How long (in seconds) to hold information about a connection after it is closed. This information is needed e.g. to detect RJA attempts, but also to avoid false alarms of Zombie bug (reconnect) attacks. |
ShowBlock | ESM_Beep | How to show connection blocks to all admins. |
ShowKick | ESM_Beep | How to show kicks to all admins. |
ShowLogin | ESM_Off | How to show player logins to all admins. This is usually done by the game type. |
ShowLogout | ESM_Off | How to show player logouts to all admins. This is usually done by the game type. |
ShowNew | ESM_Silent | How to show upcoming connections to all admins. |
ShowPreLogin | ESM_Beep | How to show player prelogins to all admins. |
Option | Default | Description |
---|---|---|
bUscriptAPI | false | Whether to support the UnrealScript event interface. If there are mods using Nephthys' events this option has to be true, otherwise this option should be set to false for better performance. |
Option | Default | Description |
---|---|---|
LogTable | all empty | All logged players. Never change a setting here directly, or server will crash! Use the Log commands instead. |
MaxLogTableEntries | 1000 | Limit for entry number in log table. On load oldest entries get deleted. Large log tables need much time to be saved and searched through. Small log tables can't store "old" players. Find an applicable value for your server. Use 0 to turn this option off (log table may grow endlessly). |
ShowLog | ESM_Beep | How to show any change of the log table to all admins |
Option | Default | Description |
---|---|---|
bAllowUploads | true | If this is set to false no player may download missing packages. |
bLimitUploadBandwidth | true |
Turns on the automatic upload bandwidth limitation algorithm. Upload is limited to the remaining available bandwidth calculated by MaxClientRate * (MaxPlayers + MaxSpectators) * UploadThrottle. If you prefer to play undisturbed by downloaders, this option should be set to true. If you prefer to get the downloader in as fast as possible (waiting until download/lag has stopped), this option should be set to false. To setup all your server's bandwidth values correctly use this small calculator (requires JavaScript to be enabled): |
MaxUploadPackageSize | -1 | Max number of bytes a package may have to be allowed to be uploaded. Greater amount is blocked before start. -1 = no limit |
MaxUploadSize | -1 | Max number of bytes a connection may download in sum. Greater amount is blocked before start. -1 = no limit |
ShowPublicUploads | ESM_Off | How to show a lag warning due to uploads to all players but admins. |
ShowUploads | ESM_Beep | How to show info about uploads to all admins. |
UploadThrottle | 1.0 | Multiplyer for automatic upload bandwidth limitation (needs bLimitUploadBandwidth=true). Values > 0.0 but < 1.0 will make downloads slower with less lag for online players, values > 1.0 will make download faster with increasing lag for online players, values <= 0.0 will disable uploads. See bLimitUploadBandwidth for more details. |
Option | Default | Description |
---|---|---|
AddServerRule | all empty | Generic additional informations given to the client as reply to server rule requests |
.Tag | The key for the information (e.g. "Policy") | |
.Value | The information itself (e.g. "No cussing!") | |
bReportPlayers | true | Include players in detailed info |
bReportSpectators | false | Include spectators in detailed info |
bReportBots | false | Include bots in detailed info |
bReportCameras | false | Include cameras in detailed info |
bReportOthers | false | Include all other score board entry relevant actors in detailed info |
bCountRealPlayersOnly | true | Whether to count real players in server list only (= don't count spectators, etc) or to count all of the checked above in server list |
Option | Default | Description |
---|---|---|
bLogAllRequests | false | Debug only, never set this to true for usual play! |
bLogRejected | false | Log attacker requests |
bLogInvalidRequests | false | Log mal-formed requests |
bLogInvalidSends | true | Log mal-formed replies |
bLogSendText | false | Debug only: log all replies sent |
bLogSendFail | true | Log failing sends |
MaxRequestsForRQA TimeDeltaForRQA |
7 1 |
Max number of requests per TimeDeltaForRQA seconds a single IP may do, more than this is considered to be a RQA (Repetitive Query Attempt) attack |
bBanRQA | false | Whether to ban an RQA attacking IP automatically |
MaxRequestsForDRQA TimeDeltaForDRQA |
20 1 |
Max number of requests per TimeDeltaForDRQA seconds counted of all IPs, more than this is considered to be a DRQA (Distributed Repetitive Query Attempt) attack, resulting in ignorance of all further requests |
Command | Description |
---|---|
Help | Show a brief summary of all commands |
Status [<conn#>] | Show a brief summary of all handled connections [a detailed info of given connection] |
Ban list [<banentry> [<sort> [<count>]]] | List ban table [only <banentry>s [sorted by <sort> [max. <count> entries]]] |
Ban remove <banentry> | Remove ban table <banentry>s |
Ban change <banentry> <banpar> | Change a single ban table <banentry> |
Ban new <banpar> | Insert a new ban table entry |
Kick <ip>[:<port>]|N=<Name> | Kick a given player. You may kick downloaders by giving the IP! |
Log list [<logentry> [<sort> [<count>]]] | List log table [only <logentry>s [sorted by <sort> [max. <count> entries]]] |
Log remove <logentry> [<name>] | Remove log table <logentry>s [only the exact <name> from the entry] |
Log range <logentry> <ipStart>[-<ipEnd>]|#<slotStart>-<slotEnd>[,Mask] | Expand log table entry to IP range / re-range <logentry>.
New range may include other entries, but must not intersect any entry. Giving ",Mask" will expand the selected range to boundaries of powers by 2 (see <logentry>). If you're unsure what this option does then don't use it! Anyways, it's recommended to use "log list" with thie required mask prior to applying it with "log range". |
Log merge <logentry> [Mask] | Merge successive <logentry>s with same name(s) [and expand them by mask calculation]. It's a shortcut to range multiple log table entries of dyn. IP players into one single entry. |
Tag | Description |
---|---|
<banentry> | <ipStart>-<ipEnd> | #<slotStart>[-<slotEnd>] | N=<name> | L=<LastUsedStart>[-<LastUsedEnd>] | C=<comment> | M=<message> | R=<reference> | Drop More than 1 search criteria may be given separated by comma "," Name, Comment, Message, Reference: selects only ban entries including the given string LastUsed: omit time and/or day if not needed, e.g. 2004/08-2004/09 Drop: selects only ban entries with DropCount > 0 |
<banpar> | {IP=<ip>[-<ip>] | Name=<string> | | Expires=<stamp> | Mode=Always,OffWhenAdmin,ReserveName,Off | bStealth=0,1 | Message=<string> | Reference=<string> }+ IP: IP address (range) to ban, given as ddd.ddd.ddd.ddd Name: only for name bans or name reservation bans Expires: time stamp when this ban entry becomes disabled automatically and becomes shown as "suspect" if configured. Note that it isn't removed automatically! Mode: Always: ban entry active always; OffWhenAdmin: ban entry active only if no admin is logged in; ReserveName (IP (range) and Name requrired): Name is useable for given IP (range) only; Off: disabled (is shown as "suspect" if configured) bStealth: 0: connection is allowed to query and to attempt PreLogin, 1: no traffic from connection is accepted Message (only usable by extending UScript interface): message the player gets shown when banned Reference: user defineable reference why this ban was setup (default = current time stamp - see server log at this stamp for details) |
<logentry> | <ipStart>-<ipEnd> | #<slotStart>[-<slotEnd> | N=<name> | L=<LastUsedStart>[-<LastUsedEnd>] | Admin | Drop | Kick[,Mask] Name: selects only log entries including the given string LastUsed: omit time and/or day if not needed, e.g. 2004/08-2004/09 Admin: selects only log entries detected as admins Drop: selects only log entries with DropCount > 0 Kick: selects only log entries with KickCount > 0 Mask (requires IP range or slot (range): extend IP range to powers of 2. E.g. range 1.2.3.24-1.2.3.129,Mask becomes 1.2.3.0-1.2.3.255 and range 1.2.3.24-1.2.8.24,Mask becomes 1.2.0.0-1.2.15.255 etc This might be useful when experimentally setting up IP ranges for logged names of dynamic IP address ranges. |
<stamp> | yyyy[/mm[/dd[%20hh[:mm[:ss]]]]] |
<string> | replace blanks with %20, % with %25 |
Unreal\System\Nephthys.ini
file every now and then ;-)bUscriptAPI=true
needs to be configured
(should be given as instruction in your end user manual!).Description: | Called when connection is rejected before opening. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space or "" if not logged yet |
Description: | Called when connection is just opened, PreLogin() not yet passed. Data may be received or sent from now on. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space or "" if not logged yet |
|
Outputs: | MoreInfo | If the UScript mod can gain some more informations about this connection it may be stored here. These informations can be obtained later by calls to GetPlayerInfo() or GetConnectionInfo(). |
Description: | Called when connection is closed before PreLogin(), e.g. due to invalid join parameters or a recognized attack. Since the connection was closed now, no data may be sent or received any more. | |
Parameters: | Addr | IP:Port of the current connection |
Name | The current name of the join attempt or "" if not analysed yet |
|
Names | All known names for connection's IP separated by space or "" if not logged yet |
Description: | Called after a new player passed PreLogin(). | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space | |
Outputs: | Error | To reject the join attempt at this place the UScript mod must set up an error message which gets logged. Although the connection gets dropped after that, the message isn't transmitted to the client. Use the game type's PreLogin() function to do so. |
Description: | Called when new connection started to load a file. | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space | |
FileName | The complete name of the file, including the device (drive letter) and all folder names. | |
FileSize | The size of the file in bytes. |
Description: | Called after new player passed Login(). | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space | |
Outputs: | Error | To reject the join attempt at this place the UScript mod must set up an error message which gets logged. Although the connection gets dropped after that, the message isn't transmitted to the client. Use the game type's Login() function to do so. |
Description: | called when an established connection is closed (kick). | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space |
Description: | Called after a player passed Logout(). | |
Parameters: | Addr | IP:Port of the current connection |
Name | The name of the join attempt (might not be the name the player used at last) | |
Names | All known names for connection's IP separated by space |
Description: | Called when a connection is considered to be RJA attacking. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space | |
count | Number of new connections resulting in attack detection | |
TimeDelta | The time needed to open the connections. |
Description: | Called when a RJA attack has stopped. This event can be called some time after the attack really stopped. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space | |
count | Number of new connections during attack | |
TimeDelta | The duration of the attack. |
Description: | Called when a connection is considered to be DRJA attacking. | |
Parameters: | count | Number of new connections resulting in attack detection |
TimeDelta | The time needed to open the connections. |
Description: | Called when a DRJA attack has stopped. This event can be called some time after the attack really stopped. | |
Parameters: | count | Number of new connections during attack |
TimeDelta | The duration of the attack. |
bUscriptAPI
doesn't matter.Description: | Determine whether an IP and/or name is banned. To implement ban checking in the game type's PreLogin() or Login() a call of GetConnectionInfo() followed by a call of this function gains the information needed to return a (ban rule customized) message to the client. | |
Outputs: | message | If a ban rule matches and it provides a message it's returned here, else "" . |
Parameters: | ip | If given: determine whether this IP is banned. At least ip or name must be given. To match a name reservation ban ip and name must be given. |
name | If given: determine whether this name is banned. At least ip or name must be given. To match a name reservation ban ip and name must be given. | |
bStealth | If bStealth!=false (i.e. =true or omitted) only stealth ban rules are considered, all non-stealth ban rules aren't applied |
|
bCount | Whether to count the ban appliance (depending on bStealth) | |
Returns: | The description of the matched ban rule or "" if none matched. |
Description: | Insert a new stealth ban rule, valid always and forever, or set an existing ban rule to always valid and append the comment. | |
Parameters: | ip | If given: ban this IP. Either ip or name must be given. |
name | If given: ban this name. Either ip or name must be given. | |
comment | Additional comment for this rule (e.g. reason). | |
AppendIfNot | If an existing ban rule matches the parameters and it doesn't include any of the (space separated) words given here, the new comment is appended to the old comment (with space as separator). Otherwise the old comment is replaced by the new comment. Note that existing ban rules aren't set to stealth. | |
Returns: | A message what has been done. |
Description: | Gets informations about a given player. | |
Parameters: | PP | The PlayerPawn to obtain the informations for. |
Outputs: | Addr | Current IP:Port of the player. |
State | State of the connection. | |
Names | All known names for connection's IP separated by space | |
MoreInfo | More informations as given by event ConnectionOpened() | |
Returns: | Whether it worked out good (true ) or bad (false , e.g. no connection for PlayerPawn). |
Description: | Kicks by a given PlayerPawn, IP:Port or IP. | |
Parameters: | PP | If given: the PlayerPawn to kick. Either PP or Addr must be given. |
Addr | If given: IP:Port or IP to kick. If only IP is given all connections matching this IP are kicked. | |
Returns: | Whether it worked out good (true ) or bad (false , e.g. no connection for PlayerPawn or IP currently not online). |
Description: | Log a new name for a given IP. E.g. this may be called in case of name changes. | |
Parameters: | ip | The IP to log. |
name | The name to log. | |
Returns: | A message what has been done. |
Description: | Executes a command as if given by npt <command>. | |
Parameters: | cmd | The command string to execute. |
Description: | Gets informations about a given connection. | |
Parameters: | Addr | IP:Port of the connection to examine. |
Outputs: | PP | PlayerPawn using this connection or none if not connected yet / anymore. |
State | State of the connection. | |
Names | All known names for the connection separated by space | |
MoreInfo | More informations as given by event ConnectionOpened() | |
UploadFilename | The complete name of the file currently uploading, including the device (drive letter) and all folder names or "" if connection isn't uploading. |
|
UploadTransfered | Number of bytes already uploaded or 0 if connection isn't uploading. | |
UploadTotalSize | The size of the file in bytes or 0 if connection isn't uploading. | |
Returns: | Whether it worked out good (true ) or bad (false , e.g. no connection for Addr). |