컬을 사용하여 소켓으로 보내기

컬을 사용하여 소켓으로 보내기

나는 컬과 socat이 함께 잘 작동하도록 노력하고 있습니다. 세부 사항은 다음과 같습니다.

  1. 시스템에 로그인하기 위해 XML을 게시합니다.
  2. 반환 메시지에는 인증 토큰이 포함되어 있습니다.
  3. 토큰을 사용하여 후속 요청을 게시합니다. 경고: 연결이 끊어지면 토큰이 만료되므로 일반 컬을 사용할 수 없습니다.

PowerShell에서는 잘 작동합니다.https://pastebin.com/5Jiw1fct

그러나 Linux에서 실행하려면 필요합니다. 연결을 유지해야 하므로 socat을 사용하기로 결정했습니다.

XML을 게시하기 위해 이 명령을 실행하는 경우:

curl http://$target_ip -d @./xml/login.xml

시스템에서 정답을 얻었습니다. 하지만 연결이 닫혀서 토큰을 재사용할 수 없습니다.

그러나 이것을 시도하면 (물론 socat 이후):

curl --unix-socket /tmp/$target_ip.sock -d @./xml/login.xml

Curl은 내가 URL을 설정하지 않았다고 불평했습니다.

아이디어가 있나요?

언제나 감사드립니다.

답변1

Curl은 Unix 소켓에 연결할 수 있지만 HTTP 요청에는 호스트 이름이 필요합니다.

127.0.0.1에서 수신하도록 socat를 설정하고 대상 시스템의 IP 주소(이름 아님)에 연결하고 URL의 호스트 이름을 IP 주소 127.0.0.1로 /etc/hosts에 추가한 다음 URL 방해를 사용해 보셨습니까? 컬 통화 중이신가요?

과거에 비표준 포트에서 서비스를 실행하는 데 문제가 있었습니다. 따라서 이미 웹 서버를 실행하고 있다면 네트워크 네임스페이스나 다른 마법을 사용하여 컬과 원격 서버가 모두 사용자라고 생각하도록 해야 합니다. 대상 포트에 연결 중입니다.

또는 원본 URL을 사용하고 socat이 lo의 비표준 포트에서 수신하도록 하고 포트를 위조하거나 /etc/hosts에 항목을 추가하지 않고도 컬에 --resolve 옵션을 지정할 수 있습니다(curl 필요) >=7.57)

비록 그렇긴 하지만매우TCP 세션에 연결된 토큰은 매우 특이하며, 더욱 놀라운 점은 이것이 https 서비스가 아닌 http용이라는 점입니다.

관련 정보