내가 망한거 가튼데요
ai추론이 강해져서 전에 몰?루고 넘어간 문제를 찾았쩌.
이상하다 싶어서 2026 버전으로 다시 치는데 전보다 나아진 성능이어요.
ai를 치기 이전에 문득 전에 toUByte 부분은 결과적으로 toUInt가 되는 편이 나았다는 거이고, 이런 거는 ai가 아직 몰?루는 문제이어서 내가 고쳐먹어야 하엿쩌.
ipv4 버전에 체크섬은 캐리를 쳐야 하는데, sum = (sum.toUShort() + (sum shr 16)).inv() 이거로 하였음 덧셈 부분에서 다시 오버플로가 나는 여지가 있어요. 맹신하면 혼납니다. 반복문으로 바껏쩌.
tcp 부분은 데이터가 홀수 크기이면 난리가 나는 부분을 잊었는데 짝수 검사를 넣고 치웠어요.
fun checksumIpVersion4(packet: ByteArray, offset: Int, ipHeaderSize: Int) {
var sum0 = packet[offset].toUInt() + packet[offset + 2].toUInt() + packet[offset + 4].toUInt() + packet[offset + 6].toUInt() +
packet[offset + 8].toUInt() + /*packet[offset + 10].toUInt() +*/ packet[offset + 12].toUInt() + packet[offset + 14].toUInt() +
packet[offset + 16].toUInt() + packet[offset + 18].toUInt()
var sum1 = packet[offset + 1].toUInt() + packet[offset + 3].toUInt() + packet[offset + 5].toUInt() + packet[offset + 7].toUInt() +
packet[offset + 9].toUInt() + /*packet[offset + 11].toUInt() +*/ packet[offset + 13].toUInt() + packet[offset + 15].toUInt() +
packet[offset + 17].toUInt() + packet[offset + 19].toUInt()
for (i in offset + 20 until offset + ipHeaderSize step 2) {
sum0 += packet[i].toUInt()
sum1 += packet[i + 1].toUInt()
}
var sum = sum0.shl(8) + sum1
while(sum > 0xFFFFu)
sum = sum.toUShort() + sum.shr(16)
sum = sum.inv()
packet[offset + 10] = sum.shr(8).toByte()
packet[offset + 11] = sum.toByte()
}
fun checksumTcpIp(packet: ByteArray, offset: Int, ipHeaderSize: Int, packetSize: Int) {
var sum0 = packet[offset + 12].toUInt() + packet[offset + 14].toUInt() + packet[offset + 16].toUInt() + packet[offset + 18].toUInt()
var sum1 = packet[offset + 9].toUInt() +
packet[offset + 13].toUInt() + packet[offset + 15].toUInt() + packet[offset + 17].toUInt() + packet[offset + 19].toUInt()
packet[offset + ipHeaderSize + 16] = 0
packet[offset + ipHeaderSize + 17] = 0
if((offset + packetSize) % 2 != 0)
packet[offset + packetSize] = 0
for (i in offset + ipHeaderSize until offset + packetSize step 2) {
sum0 += packet[i].toUInt()
sum1 += packet[i + 1].toUInt()
}
val size = packetSize - ipHeaderSize
var sum = ((sum0.shl(8) + sum1).toInt() + size).toUInt()
sum = (sum.toUShort() + sum.shr(16)).inv()
packet[offset+ipHeaderSize + 16] = sum.shr(8).toByte()
packet[offset+ipHeaderSize + 17] = sum.toByte()
}음 ..
