{"id":3717,"date":"2026-11-14T21:00:00","date_gmt":"2026-11-14T21:00:00","guid":{"rendered":"https:\/\/vpslake.com\/blog\/?p=3717"},"modified":"2026-11-14T21:00:00","modified_gmt":"2026-11-14T21:00:00","slug":"check-rdp-login-history","status":"publish","type":"post","link":"https:\/\/vpslake.com\/blog\/2026\/11\/14\/check-rdp-login-history\/","title":{"rendered":"How to Check RDP Login History (4624 and 4625)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">To check RDP login history, review the Windows Security log for Event IDs 4624 and 4625, then confirm the logon type, account, time, and source IP. Event 4624 records a successful logon, while 4625 records a failed one, so together they show both access and attempted access to your server.<\/p>\n\n\n\n<aside class=\"ap-card\" aria-label=\"Buffalo Windows RDP 4 GB (Basic KVM 4)\">\n<span class=\"ap-card__badge\">Private admin RDP<\/span>\n<div class=\"ap-card__body\"><p class=\"ap-card__name\">Buffalo Windows RDP 4 GB (Basic KVM 4)<\/p><p class=\"ap-card__best\">Best for one browser profile, MT4\/MT5 EA, rater work, Google Ads account<\/p><ul class=\"ap-card__features\"><li>3 vCPU Intel Xeon E5-2699 v4, 4 GB reserved RAM<\/li><li>60 GB SSD (RAID 1), 3 TB traffic on a 200 Mbps port<\/li><li>Full Administrator, private KVM VM, 1 dedicated US IPv4<\/li><li>Windows Server 2019, Windows 10 Pro or Windows 11 Pro image; bring your own licence<\/li><li>Browser console, reinstall, reboot from the client area<\/li><li>Pay by crypto (Cryptomus), UPI\/card (Razorpay, Cashfree) or card (Paddle)<\/li><\/ul><\/div>\n<div class=\"ap-card__side\"><p class=\"ap-card__price\">$9.99\/mo <small>USD monthly<\/small><\/p><a class=\"ap-card__btn\" href=\"https:\/\/my.vpslake.com\/index.php?rp=\/store\/buffalo-new-york-basic-kvm-windows-rdp\/basic-kvm-4-windows-rdp\">Order now \u2192<\/a><\/div>\n<\/aside>\n\n\n\n<h2 class=\"wp-block-heading\">What you need before checking RDP logs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You need administrator access to the Windows computer you want to inspect. The checks below work on Windows Server and Windows desktop editions with Remote Desktop enabled, and they inspect logs on the destination computer, not on the PC you used to connect.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You should also know the approximate time of the login and the usernames you expect to see. That makes it much easier to separate your own sessions from background Windows activity or unrelated authentication events.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Windows must be auditing logon events for the Security log to contain useful results. Microsoft identifies Event ID 4624 as a successful logon and Event ID 4625 as a failed logon; the events are generated on the computer that was accessed. If your Security log is missing these events, check the Audit Logon policy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Open the Windows Security log<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why this matters: the Security log is where Windows records the authentication result, account name, logon type, and often the source address.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Sign in to the Windows server or RDP host with an account that can read event logs.<\/li>\n\n\n<li>Press <code>Win + R<\/code>, type <code>eventvwr.msc<\/code>, and press Enter.<\/li>\n\n\n<li>Expand <strong>Windows Logs<\/strong>, then select <strong>Security<\/strong>.<\/li>\n\n\n<li>In the Actions pane, select <strong>Filter Current Log<\/strong>.<\/li>\n\n\n<li>In <strong>Logged<\/strong>, choose a useful range such as <strong>Last 24 hours<\/strong> or <strong>Last 7 days<\/strong>.<\/li>\n\n\n<li>In <strong>Event IDs<\/strong>, enter <code>4624,4625<\/code>, then select <strong>OK<\/strong>.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Success looks like a filtered list containing only successful and failed logon events for the selected period. Double-click an event to open its details. Use the <strong>General<\/strong> tab for a readable summary and the <strong>Details<\/strong> tab when you need the exact XML field names.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Identify an actual RDP login<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why this matters: Event IDs alone do not prove that the connection used Remote Desktop. Windows creates logon events for several kinds of local, network, service, and remote activity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a successful RDP session, open Event ID 4624 and look for these fields:<\/p>\n\n\n\n<figure class=\"wp-block-table ap-table\"><table><thead><tr><th>Field<\/th><th>What to look for<\/th><\/tr><\/thead><tbody><tr><td>Logon Type<\/td><td><code>10<\/code>, named <code>RemoteInteractive<\/code><\/td><\/tr><tr><td>New Logon account<\/td><td>The user that received the session<\/td><\/tr><tr><td>Time Created<\/td><td>When Windows created the logon session<\/td><\/tr><tr><td>Network Information<\/td><td>Source Network Address and Workstation Name, when supplied<\/td><\/tr><tr><td>Logon ID<\/td><td>A value you can use to correlate related events<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft describes logon type 10 as a user logging on remotely through Terminal Services or Remote Desktop in its <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/security\/threat-protection\/auditing\/event-4624\" target=\"_blank\" rel=\"noopener\">Event ID 4624 reference<\/a>. The source address may be an IPv4 address, IPv6 address, or an IPv4-mapped IPv6 address. A blank, <code>-<\/code>, or localhost value is not proof of an attack or a safe login; it means the authentication context did not provide a useful remote address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Event ID 4625 means that a logon failed, but it can be created for more than one kind of logon. Check <strong>Logon Type<\/strong>, <strong>Account Name<\/strong>, <strong>Failure Reason<\/strong>, <strong>Status<\/strong>, <strong>Sub Status<\/strong>, and <strong>Source Network Address<\/strong> before treating it as a failed RDP password attempt. Microsoft&#8217;s <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/security\/threat-protection\/auditing\/event-4625\" target=\"_blank\" rel=\"noopener\">Event ID 4625 reference<\/a> documents these fields and explains that 4625 is logged for any logon failure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a second view of RDP session activity, open <strong>Applications and Services Logs &gt; Microsoft &gt; Windows &gt; TerminalServices-LocalSessionManager &gt; Operational<\/strong>. This log is useful for session-level evidence such as a successful session logon or a disconnect. Use the Security log for authentication details and the Terminal Services log to understand what happened to the RDP session afterward.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Create a PowerShell report<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why this matters: a report is faster than opening hundreds of events manually and makes it easier to compare usernames, source IPs, and timestamps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open PowerShell as an administrator and run this command. It reads the last seven days of Security events and extracts the fields most useful for RDP review.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$events = Get-WinEvent -FilterHashtable @{\n    LogName   = 'Security'\n    Id        = @(4624, 4625)\n    StartTime = (Get-Date).AddDays(-7)\n}\n\n$events | ForEach-Object {\n    $xml = [xml]$_.ToXml()\n    $fields = @{}\n\n    $xml.Event.EventData.Data | ForEach-Object {\n        $fields[$_.Name] = $_.'#text'\n    }\n\n    [pscustomobject]@{\n        Time          = $_.TimeCreated\n        EventId       = $_.Id\n        User          = \"$($fields.TargetDomainName)\\$($fields.TargetUserName)\"\n        LogonType     = $fields.LogonType\n        SourceIP      = $fields.IpAddress\n        FailureReason = $fields.FailureReason\n        Status        = $fields.Status\n        SubStatus     = $fields.SubStatus\n    }\n} |\n    Where-Object { $_.LogonType -eq '10' -or $_.EventId -eq 4625 } |\n    Sort-Object Time -Descending |\n    Format-Table -AutoSize<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The report should show the newest events first. Successful RDP events normally appear with <code>EventId<\/code> 4624 and <code>LogonType<\/code> 10. Failed events may have a different logon type depending on which part of the authentication process failed, so keep the 4625 rows for manual review instead of filtering them out automatically.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To see only successful RemoteInteractive sessions after the report has been created, add this filter before <code>Format-Table<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Where-Object { $_.EventId -eq 4624 -and $_.LogonType -eq '10' }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To group the failed events by source address and find the busiest sources, use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$events |\n    Where-Object { $_.Id -eq 4625 } |\n    ForEach-Object {\n        $xml = [xml]$_.ToXml()\n        ($xml.Event.EventData.Data | Where-Object Name -eq 'IpAddress').'#text'\n    } |\n    Group-Object |\n    Sort-Object Count -Descending<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Success looks like a short table of IP addresses and counts. Treat the count as a lead, not a verdict: many people can share one public IP, and one person can appear under different addresses.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Spot a brute-force pattern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why this matters: one failed password is normal; a repeated pattern can tell you that the RDP endpoint is being guessed or that an old saved password is repeatedly failing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Review the events together rather than reacting to one row. Indicators that deserve investigation include:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Many Event ID 4625 entries within a short period.<\/li>\n\n\n<li>Repeated failures from one source IP.<\/li>\n\n\n<li>Attempts against several usernames, especially names you do not use.<\/li>\n\n\n<li>Status or Sub Status values that repeatedly indicate a bad username or password.<\/li>\n\n\n<li>A successful 4624 logon that follows the failures and uses an account, time, or source address you do not recognize.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft guidance for an internet-facing Windows VM notes that 4625 events appearing almost every second with a bad-username-or-password reason can indicate a brute-force attack. That pattern is stronger evidence than a single failed attempt, but it still needs context. A scheduled task, disconnected client, password manager, or another device with an old password can also generate repeated failures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you find a suspicious row, record the exact timestamp, account name, source address, logon type, failure reason, status, and sub-status. If a successful session is unexpected, also record the 4624 Logon ID and inspect nearby Terminal Services events before changing or deleting logs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Take the next security action<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why this matters: login history is evidence. It does not stop another attempt, so use what you found to reduce exposure and protect the account.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the successful login is yours, note the source address and time so you can recognize the normal pattern later. If it is not yours, change the affected password from a trusted session, review local users and Remote Desktop Users membership, and disconnect any unfamiliar session. Avoid disabling the only administrator account or closing your current recovery path while you are connected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For repeated failures, apply the least disruptive control that fits your setup:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Restrict the inbound RDP rule to trusted source IP addresses when your address is stable.<\/li>\n\n\n<li>Put RDP behind a VPN or another private access path when your users can use one.<\/li>\n\n\n<li>Keep Network Level Authentication enabled where supported.<\/li>\n\n\n<li>Use a strong, unique password and remove unused accounts.<\/li>\n\n\n<li>Set a sensible account lockout policy after testing it against your own support and recovery process. If an account is already locked, use this <a href=\"https:\/\/vpslake.com\/blog\/2026\/10\/12\/windows-rdp-account-locked-out-error\/\">Windows RDP account lockout troubleshooting guide<\/a>.<\/li>\n\n\n<li>Treat a port change as noise reduction, not as the main security control.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to change the listener, first read <a href=\"https:\/\/vpslake.com\/blog\/2026\/10\/11\/change-default-rdp-port-windows-server\/\">how to change the default RDP port on Windows Server<\/a>. The <a href=\"https:\/\/vpslake.com\/blog\/2026\/10\/18\/what-port-does-rdp-use\/\">RDP port 3389 explanation<\/a> also explains which client, firewall, and provider rules need to agree.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify your findings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use this checklist before you conclude that a login was unauthorized:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>The event was recorded on the server you intended to inspect.<\/li>\n\n\n<li>The event time is in the server&#8217;s local display time; compare it with your own timezone.<\/li>\n\n\n<li>The username and account domain match the account you expected or investigated.<\/li>\n\n\n<li>A successful event has logon type 10, or you have supporting Terminal Services evidence.<\/li>\n\n\n<li>The source address is compared with your own public IP, VPN exit IP, office network, or known users.<\/li>\n\n\n<li>You checked both successful and failed events around the same time.<\/li>\n\n\n<li>You preserved the relevant timestamps and event details before making changes.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If the log is empty, check whether the selected time range is correct and whether you are viewing the destination server&#8217;s Security log. Also check the Audit Logon policy and confirm that the Security log has not rolled over because of its size limit. If the PowerShell output has blank fields, open one event in Event Viewer and compare its Details view with the field names in the script; different authentication paths can omit fields.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting common RDP history questions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I see 4625 but no source IP.<\/strong> Some authentication contexts do not provide a usable IP address. Use the account, time, logon type, status, and nearby Terminal Services events, and check the network or firewall logs if you need connection-level evidence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I see many 4624 events.<\/strong> Not every successful logon is an interactive RDP session. Filter for logon type 10, then review the account and source fields. Service, network, scheduled-task, and local activity can create other successful logon types.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>My own RDP login created more than one event.<\/strong> Windows can record more than one authentication or session event for a connection. Correlate the time, account, source address, Logon ID, and Terminal Services session events instead of counting every row as a separate person.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Security log does not go back far enough.<\/strong> Windows keeps only the records that fit the Security log&#8217;s configured size and retention behavior. Export important events to a central log system or increase retention before you need a longer history.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What event ID shows a successful RDP login?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Event ID 4624 shows a successful logon. For a normal full RDP logon, look for <strong>Logon Type 10<\/strong>, named <code>RemoteInteractive<\/code>, and confirm the user, time, and source address.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What event ID shows a failed RDP login?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Event ID 4625 shows a failed logon. Because it covers more than RDP, inspect the logon type and network fields rather than assuming every 4625 entry came from a remote desktop password attempt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I check who logged into my Windows server?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open Event Viewer, go to <strong>Windows Logs &gt; Security<\/strong>, and filter for Event ID 4624. Review the New Logon account, time, Logon Type, and Source Network Address; type 10 is the key indicator for a successful RDP session.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How far back does RDP login history go?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It goes back only as far as the Security and Terminal Services logs retain events. The available period depends on log size and retention settings, so export or forward security events if you need a durable history.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Should I change the RDP port after seeing failed attempts?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A port change can reduce automated scanning noise, but it does not replace strong authentication, restricted firewall access, or a VPN. If you change it, update the server listener, firewall, provider rule, and RDP client together and keep a recovery path.<\/p>\n\n\n\n<aside class=\"ap-cta\" aria-label=\"Review a private admin RDP\"><div class=\"ap-cta__content\"><p class=\"ap-cta__eyebrow\">Secure your Windows server<\/p><p class=\"ap-cta__title\">Review a private admin RDP<\/p><p class=\"ap-cta__text\">Get a private KVM Windows RDP with full Administrator access and a dedicated US IPv4.<\/p><\/div><a class=\"ap-cta__btn\" href=\"https:\/\/vpslake.com\/buy-buffalo-windows-rdp\">View Windows RDP plans<\/a><\/aside>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What event ID shows a successful RDP login?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Event ID 4624 shows a successful logon. For a normal full RDP logon, look for Logon Type 10, named RemoteInteractive, and confirm the user, time, and source address.\"}}, {\"@type\": \"Question\", \"name\": \"What event ID shows a failed RDP login?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Event ID 4625 shows a failed logon. Because it covers more than RDP, inspect the logon type and network fields rather than assuming every 4625 entry came from a remote desktop password attempt.\"}}, {\"@type\": \"Question\", \"name\": \"How do I check who logged into my Windows server?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Open Event Viewer, go to Windows Logs &gt; Security, and filter for Event ID 4624. Review the New Logon account, time, Logon Type, and Source Network Address; type 10 is the key indicator for a successful RDP session.\"}}, {\"@type\": \"Question\", \"name\": \"How far back does RDP login history go?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"It goes back only as far as the Security and Terminal Services logs retain events. The available period depends on log size and retention settings, so export or forward security events if you need a durable history.\"}}, {\"@type\": \"Question\", \"name\": \"Should I change the RDP port after seeing failed attempts?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"A port change can reduce automated scanning noise, but it does not replace strong authentication, restricted firewall access, or a VPN. If you change it, update the server listener, firewall, provider rule, and RDP client together and keep a recovery path.\"}}]}<\/script>\n\n","protected":false},"excerpt":{"rendered":"Learn how to check RDP login history with Event Viewer and PowerShell, read events 4624 and 4625, spot brute-force attempts, and respond safely.","protected":false},"author":1,"featured_media":3718,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[13],"tags":[418,855,854,23,35],"class_list":["post-3717","post","type-post","status-publish","format-standard","has-post-thumbnail","category-server-security","tag-brute-force","tag-event-viewer","tag-rdp-logs","tag-remote-desktop","tag-windows-security","cs-entry"],"_links":{"self":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/3717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/comments?post=3717"}],"version-history":[{"count":1,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/3717\/revisions"}],"predecessor-version":[{"id":4037,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/3717\/revisions\/4037"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media\/3718"}],"wp:attachment":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media?parent=3717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/categories?post=3717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/tags?post=3717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}