suka macos ebani
This commit is contained in:
@ -3,53 +3,66 @@ package su.sonoma
|
||||
import kotlinx.coroutines.*
|
||||
import java.net.ServerSocket
|
||||
import java.net.Socket
|
||||
import java.io.InputStream
|
||||
import java.io.DataInputStream
|
||||
|
||||
fun startServer() = runBlocking {
|
||||
|
||||
val server = ServerSocket(9093)
|
||||
fun startServer(port: Int) = runBlocking {
|
||||
val tun = TunDevice("10.1.0.1")
|
||||
|
||||
val server = ServerSocket(port)
|
||||
println("Server started")
|
||||
|
||||
|
||||
while (true) {
|
||||
val client = server.accept()
|
||||
println("${client.inetAddress} Client pairing")
|
||||
|
||||
launch {
|
||||
handle(client)
|
||||
launch(Dispatchers.IO) {
|
||||
println("${client.inetAddress} Client connected")
|
||||
|
||||
try {
|
||||
handle(client)
|
||||
} catch (e: Exception) {
|
||||
println("${client.inetAddress} Client disconnected: ${e.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun handle(socket: Socket) {
|
||||
|
||||
val input = socket.getInputStream()
|
||||
val output = socket.getOutputStream()
|
||||
val input = withContext(Dispatchers.IO) {
|
||||
socket.getInputStream()
|
||||
}
|
||||
val output = withContext(Dispatchers.IO) {
|
||||
socket.getOutputStream()
|
||||
}
|
||||
|
||||
val buffer = ByteArray(32768)
|
||||
|
||||
while (true) {
|
||||
withContext(Dispatchers.IO) {
|
||||
while (true) {
|
||||
|
||||
val hi = input.read()
|
||||
val lo = input.read()
|
||||
val len = (hi shl 8) or lo
|
||||
val hi = input.read()
|
||||
|
||||
DataInputStream(input).readFully(buffer, 0, len)
|
||||
val lo = input.read()
|
||||
|
||||
val packet = buffer.copyOf(len)
|
||||
val len = (hi shl 8) or lo
|
||||
|
||||
val response = forwardPacket(packet)
|
||||
DataInputStream(input).readFully(buffer, 0, len)
|
||||
|
||||
output.write(response.size shr 8)
|
||||
output.write(response.size)
|
||||
val packet = buffer.copyOf(len)
|
||||
|
||||
output.write(response)
|
||||
val response = forwardPacket(packet)
|
||||
|
||||
output.write(response.size shr 8)
|
||||
output.write(response.size)
|
||||
output.write(response)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
fun forwardPacket(packet: ByteArray): ByteArray {
|
||||
|
||||
val host = "example.com"
|
||||
val port = 80
|
||||
val host = "localhost"
|
||||
val port = 1080
|
||||
|
||||
val socket = Socket(host, port)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user