3

나는 액세스 포인트로 취급 할 수있는 임베디드 시스템을 가지고 있습니다. 해당 시스템에서 실행되는 프로그램이 있으며 해당 액세스 포인트에 연결된 장치와 네트워크 통신을 수행합니다. 일부 진단 정보 (데이터 구조)를 포함하고 명령을 수신하는 UDP 패킷을 보냅니다. 문제는 해당 발신 데이터 구조의 일부 필드가 데이터로 채워지지 않는 경우입니다 (예 : 0 또는 일부 가비지). 나는 그 필드가 매번 정확하게 채워질 필요가 있으며 어떤 값을 넣어야하는지 알고 있습니다.리눅스에서 응용 프로그램과 네트워크 간의 통신을 도용

내가 수행해야하는 또 다른 작업은이 프로그램에 오는 들어오는 패킷을 필터링하는 것입니다 (어떤 포트가 수신 대기하는지 알고 있습니다.) - 일반적으로 단순히 전달해야하지만 occassionaly (예 : 센서)를 생성하려면 새 패킷으로 완전히 대체해야합니다.

iptables 및 pcap의 몇 가지 현명한 사용법에서부터 내 자신의 커널 모듈 작성에 이르기까지 다양한 아이디어가 있습니다. 필자는 임베디드 응용 프로그램의 소스를 소유하지 않으므로 코드에이 기능을 포함 할 수 없습니다. 공연은 여기서 중요한 부분이며, 나는 당신의 제안을 듣고 싶습니다. 무엇을해야합니까? 내 자신의 커널 모듈을 작성하는 것이 나에게 가장 좋은 해결책 인 것 같지만 네트워크 해킹에 대한 경험이 없기 때문에이 문제에 더 적합한 다른 방법이있을 수 있습니다. 모든 의견을 높게 평가됩니다!

+1

사용하십시오. 그 텍스트 블록은 정말로 읽기가 어렵습니다. – Mat

+0

더 나은가요? :) –

+1

응용 프로그램이 동적으로 또는 정적으로 링크되어 있습니까? 'LD_PRELOAD' 라이브러리를 사용하여 소켓 액세스를 조정할 수 있습니다. – Hasturkun

답변

2

한 가지 표준 접근법은 libnetfilter_queue를 사용하여 패킷을 직접 가로 채고 수정하는 것입니다. 자신의 커널 모듈을 작성하기 전에 적어도 시도해야합니다.

+0

ok libnetfilter로 구현하기로 결정했습니다 - 하드 코어 커널 해킹과 직접적인 프록시 사용 간의 균형이 좋은 것처럼 보입니다. 문제는 일종의 뇌 폭풍 이었지만 나는이 해결책을 받아 들인다. 그래서 제안을 한 모든 사람에게 감사한다. –

1

사용자 공간에서 할 수 있습니다. 패킷을 수신 한 서버를 작성하여 다시 보내십시오. localhost를 대상 IP로 사용하거나 대상 주소가있는 시스템을 구성하기 위해 응용 프로그램을 구성해야합니다. 그 전형적인 "man-in-the-middle"셋업.

+0

OK, 그러나 나가는 패킷의 IP 주소를 알아야합니다. 또한 해당 액세스 포인트에서 실행중인 응용 프로그램을 변경 (구성 포함) 할 수 없으므로 대상 IP 만 변경하는 것은 불가능합니다. 어쨌든 iptables를 사용하여 localhost로 패킷을 다시 리디렉션해야하지만 AFAIK보다는 목적지 IP를 잃어서 어디서 다시 보내야할지 모를 것입니다. 틀 렸으면 고쳐줘. 또 다른 문제는 성능입니다. iptables와 프록시 서버를 사용하는 것이 즉석에서 패킷을 수정하는 스마트 커널 모듈보다 더 빠를 지 확신 할 수 없습니다. –

관련 문제