CARVIEW |
Select Language
HTTP/2 200
date: Wed, 23 Jul 2025 00:42:54 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"3e0a89e160558433f3dd1a05a13323cf"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=73U%2BFGl7akXOjQ3ZYn2rQpXvqs2ERRx2F4hB%2Fy9R8ZfA7DKsLMg05pYklkkanBzPb3%2B9uDiagtt7dq8BfnKLVDfibvP0pHsb8vV%2B60%2Bn8A0xsAltmz42btA9l8uKvHK3Pm7BU40cJ83epySoCEoccGC6mz8%2BLvDFvNX1PZwZRsjUa8ourrrpbWaA1dYKG4XbOjD459autJFV5jgu1sQo20cg4q%2BxIO3P0h5tuF9%2FPk6mI%2BrA6DMee6Z9%2FKR23mZkWRu3TQZar0wJSs%2FJ9eeWfQ%3D%3D--lAtpCqMdefqkPPQo--C2wRFzCj8yj9H1Tnk4RXFg%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1438165484.1753231373; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 00:42:53 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 00:42:53 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: DD52:36F97A:209913:2D78D8:6880300D
GitHub - ewust/forge_socket: Linux kernel module for inspecting/modifying TCP socket state from user space
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 26
Linux kernel module for inspecting/modifying TCP socket state from user space
License
ewust/forge_socket
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
forge_socket is a Linux kernel module that allows inspection and modification of TCP sockets from user space. For example, a user space application can specify any arbitrary TCP state (i.e. source/destination IP and port, sequence/acknowledgement numbers), and request the module modify a socket to these parameters. Then, the application can call send() and recv() as normal on this socket. Furthermore, you can request the state of a TCP socket, for example, to learn the sequence and acknowledgement numbers of a connection owned by the process. INSTALLING ---------- To install forge_socket, from the module directory, run: make sudo insmod forge_socket.ko To remove, run: sudo rmmod forge_socket USING ----- forge_socket provides userspace processes with an additional socket type, SOCK_FORGE. You can instantiate with #include "forge_socket.h" ... int sock = socket(AF_INET, SOCK_FORGE, 0); This socket will be identical to a TCP socket (SOCK_STREAM), but supports an additional getsockopt and setsockopt option, TCP_STATE. int len; struct tcp_state state; getsockopt(sock, IPPROTO_TCP, TCP_STATE, &state, &len); will fetch the current TCP state of the socket, and fill in members of the tcp_state struct (defined in forge_socket.h) setsockopt(sock, IPPROTO_TCP, TCP_STATE, &state, sizeof(state)); will set the current state of a socket. Note that currently, this only supports going from a TCP_CLOSE to a TCP_ESTABLISHED state socket, and it assumes the userspace process has previously called bind(2) on the socket, to set up some of the state. Additional options must also be set prior to this (SO_REUSEADDR, and IP_TRANSPARENT) in some cases. Eventually this may become part of the setsockopt call, for now, the caller is responsible for setting these options. See set_sock_state() in test.c for example usage.
About
Linux kernel module for inspecting/modifying TCP socket state from user space
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
You can’t perform that action at this time.